VC++ 从流中解码变音符号

VC++ decoding diacritics characters from stream

我有一个小应用程序 client/server 应用程序。客户端应用程序 (C#),服务器端 (VC++)。我的应用程序将使用流将任何字符发送到服务器端;英文字符工作正常,但非英文字符除外。 VC++ 正在使用 CString 从流中接受此数据。我修复了一些变音符号字符以在收到时正确读取,但其中一些不起作用。 客户端在发送之前使用 UnicodeEncoding() 对该字符进行编码。它适用于字符 É、À、È、Ù、Â、Ê、È、Ô、Û、È、Ï、Ö、Ü,除了 Ÿ(这个在服务器端将读为 x_)和土耳其语字符读取不正确.

问题:

示例代码会很有帮助。

谢谢。

下面的代码有效。因此数据正在更改或缓冲区未被刷新的某个地方。我通常的建议是检查字节数并查看字节数在哪里被更改。通常是未设置为 unicode 的流 class。

            string input = "ÉÀÈÙÂÊÎÔÛËÏÖÜŸ";
            byte[] temp = Encoding.Unicode.GetBytes(input);
            string output = Encoding.Unicode.GetString(temp);

以防有人遇到同样的问题。

这是我解决问题的方法。 在客户端

if (IsUnicode(str))
{
   writer.Write((uint)str.Length + 1);
   writer.Write(Encoding.Unicode.GetBytes(str));
}

private bool IsUnicode(string text)
    {
        if (string.IsNullOrEmpty(text))
            return false;

        foreach (char c in text)
        {
            if (c > 0x7F)
                return true;
        }
        return false;
    }

在服务器端 使用带有 CP_UTF8 参数

的 CW2A 转换字符串
CStringA str = CW2A(m_CString, CP_UTF8);
m_CString.Format(_T("%s"), str);