VC++ 从流中解码变音符号
VC++ decoding diacritics characters from stream
我有一个小应用程序 client/server 应用程序。客户端应用程序 (C#),服务器端 (VC++)。我的应用程序将使用流将任何字符发送到服务器端;英文字符工作正常,但非英文字符除外。 VC++ 正在使用 CString 从流中接受此数据。我修复了一些变音符号字符以在收到时正确读取,但其中一些不起作用。
客户端在发送之前使用 UnicodeEncoding() 对该字符进行编码。它适用于字符 É、À、È、Ù、Â、Ê、È、Ô、Û、È、Ï、Ö、Ü,除了 Ÿ(这个在服务器端将读为 x_)和土耳其语字符读取不正确.
问题:
- 我应该在服务器端添加什么来处理 Chinese/Russian/Turkish.. 等变音符号?
- 在客户端; UnicodeEncoding() 应该足以正确编码那些变音符号字符吗?或者其他字符应该以不同的方式编码?
示例代码会很有帮助。
谢谢。
下面的代码有效。因此数据正在更改或缓冲区未被刷新的某个地方。我通常的建议是检查字节数并查看字节数在哪里被更改。通常是未设置为 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);
我有一个小应用程序 client/server 应用程序。客户端应用程序 (C#),服务器端 (VC++)。我的应用程序将使用流将任何字符发送到服务器端;英文字符工作正常,但非英文字符除外。 VC++ 正在使用 CString 从流中接受此数据。我修复了一些变音符号字符以在收到时正确读取,但其中一些不起作用。 客户端在发送之前使用 UnicodeEncoding() 对该字符进行编码。它适用于字符 É、À、È、Ù、Â、Ê、È、Ô、Û、È、Ï、Ö、Ü,除了 Ÿ(这个在服务器端将读为 x_)和土耳其语字符读取不正确.
问题:
- 我应该在服务器端添加什么来处理 Chinese/Russian/Turkish.. 等变音符号?
- 在客户端; UnicodeEncoding() 应该足以正确编码那些变音符号字符吗?或者其他字符应该以不同的方式编码?
示例代码会很有帮助。
谢谢。
下面的代码有效。因此数据正在更改或缓冲区未被刷新的某个地方。我通常的建议是检查字节数并查看字节数在哪里被更改。通常是未设置为 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);