2

我目前正在构建一个通过套接字与 C# 应用程序通信的 C++ 应用程序。我的 C++ 应用程序通过套接字发送 wchar_t*。

以下是 send 的概述:

<!-- Normal xml file-- 

这是我在另一边收到的内容(我对字节数组执行了 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# 端?

4

1 回答 1

5

看起来它正在发送 UTF-16,而不是 UTF-8,这是有道理的 -wchar_t基本上是 16 位类型(在 Windows 中),据我所知,你正在将它发送到“原始”。我建议,如果您要将数据转换为XDocumentor XmlDocument,您可以使用二进制数据 - 该框架知道如何为 XML 文件 (IIRC) 自动检测 UTF-16。

如果 XML 声明将其声明为 UTF-8,而实际上它是 UTF-16,那么您可能会遇到问题。

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

于 2009-06-03T15:07:49.860 回答