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()是否足以正确编码这些变音符字符?或者其他字符应该以不同的方式编码?

一个示例代码将是一个很大的帮助。

谢谢。

vc++解码变音符字符从流

下面的代码可以工作。所以数据正在被更改,或者某个缓冲区没有被刷新。我通常的建议是检查字节计数,看看字节计数在哪里被改变了。通常它是一个未被设置为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);