vc++解码变音符字符从流
本文关键字:字符 音符 解码 vc++ | 更新日期: 2023-09-27 18:08:03
我有一个小应用程序客户端/服务器应用程序。客户端应用程序(c#),服务器端(vc++)。我的应用程序将发送任何字符到服务器端使用流;除非英语字符外,英文字符工作正常。vc++使用CString从流中接收这些数据。我修复了一些变音符字符在接收时正确读取,但其中一些不会工作。客户端在发送之前使用UnicodeEncoding()对这些字符进行编码。它工作正常字符E, A, E, U, A, E, I, O, U, E, I, O, U除了ÿ(这个会解读为在服务器端间)和土耳其字符读取错误。
问题:
- 我应该在我的服务器端添加什么来处理变音符字符,如中文/俄语/土耳其语等?
- 客户端;UnicodeEncoding()是否足以正确编码这些变音符字符?或者其他字符应该以不同的方式编码?
一个示例代码将是一个很大的帮助。
谢谢。
下面的代码可以工作。所以数据正在被更改,或者某个缓冲区没有被刷新。我通常的建议是检查字节计数,看看字节计数在哪里被改变了。通常它是一个未被设置为unicode的流类。
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);