我目前正在建设一个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中),而据我可以告诉你送下来“原始”。我建议,如果你打算将数据转换成XDocumentXmlDocument,你用二进制数据做 - 框架知道如何自动检测UTF-16的XML文件(IIRC)

您将可能有问题,如果XML声明声明它是UTF-8,当它真的UTF-16虽然。

或者,使用在C ++侧合适的编码类的真正发送UTF-8。这将需要额外的处理时间,但通常节省带宽,如果这是一个考虑因素。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top