是什么决定了C ++中的字符编码

时间:2016-04-14 15:16:02

标签: c# c++ windows encoding

我正在为Windows开发,该软件是客户端 - 服务器解决方案,客户端是用C#编写的,服务器是用C ++编写的。

今天我想开发一个简单的函数:从客户端发送字符串,在服务器端接收它,并将其写入xml文件。

我的问题是我在服务器端看到的字符是ANSI编码的。根据我的知识,C#字符串是由unicode编码的,为什么我的服务器端c ++ app将字符串编码为ANSI?我认为我的通信模块不会修改字符串。

1 个答案:

答案 0 :(得分:2)

嗯,C#字符串是UTF16编码的。
您可能希望使用std::u16string而不是常规std::string

其他选项是将C#字符串编码到不同的编码中,如UTF8和System.Text.Encoding类。

由于IO操作比CPU操作慢得多,并且由于IO操作时间也与所涉及的内存大小相关,并且UTF8通常比UTF16更精简,因此通常的做法是通过网络与UTF8进行通信。

因此,我会在实际发送之前将C#字符串转换为UTF8,并在服务器端使用std::string

请注意,std::string不是UTF8可识别的,所以写str[0]之类的内容可能不会提供完整的UTF8序列,而只会提供它的第一个字符。