我目前正在构建一个 C++ 应用程序,该应用程序通过套接字与 C# 应用程序进行通信。 我的 C++ 应用程序通过套接字发送 wchar_t*。
以下是发送内容的概述:
<!-- 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# 端?
最佳答案
看起来它发送的是 UTF-16,而不是 UTF-8,这是有道理的 - wchar_t
基本上是 16 位类型(在 Windows 中),并且您将其发送为“原始”据我所知。我建议,如果您要将数据转换为 XDocument
或 XmlDocument
,请使用二进制数据进行操作 - 框架知道如何自动检测 UTF-16 XML 文件 (IIRC)。
如果 XML 声明将其声明为 UTF-8,而实际上它是 UTF-16,那么您可能会遇到问题。
或者,在 C++ 端使用合适的编码类来真正发送 UTF-8。这将需要额外的处理时间,但如果考虑到这一点,通常可以节省带宽。
关于c# - 通过套接字从 C++ wchar_t 到 C# char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945309/