从C ++通过插座的wchar_t到C#的char
-
09-09-2019 - |
题
我目前正在建设一个C ++应用程序通过套接字通信,以C#应用程序。 我的C ++程序经由套接字发送wchar_t的*。
下面是对什么是发送的概述:
<!-- Normal xml file--
下面是我接收在另一侧(I做stream.read字节数组和使用 UTF8Encoding.GetString()的字节数组转换成可读的字符串)
<\0!\0-\0-\0 \0N\0o\0r\0m\0a\0l\0 \0x\0m\0l\0 \0f\0i\0l\0e\0-\0-
这是个编组的问题?你说什么?为什么是0扩展和为什么的unicode卡拉科特不会在C#侧出现?
解决方案
看起来像它的发送UTF-16,而不是UTF-8,这是有道理的 - wchar_t
基本上是一个16位的类型(在Windows中),而据我可以告诉你送下来“原始”。我建议,如果你打算将数据转换成XDocument
或XmlDocument
,你用二进制数据做 - 框架知道如何自动检测UTF-16的XML文件(IIRC)
您将可能有问题,如果XML声明声明它是UTF-8,当它真的UTF-16虽然。
或者,使用在C ++侧合适的编码类的真正发送UTF-8。这将需要额外的处理时间,但通常节省带宽,如果这是一个考虑因素。
不隶属于 StackOverflow