我正在为Windows开发,该软件是客户端 - 服务器解决方案,客户端是用C#编写的,服务器是用C ++编写的。
今天我想开发一个简单的函数:从客户端发送字符串,在服务器端接收它,并将其写入xml文件。
我的问题是我在服务器端看到的字符是ANSI编码的。根据我的知识,C#字符串是由unicode编码的,为什么我的服务器端c ++ app将字符串编码为ANSI?我认为我的通信模块不会修改字符串。
答案 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序列,而只会提供它的第一个字符。