从C ++ wchar_t到C#char通过socket

时间:2009-06-03 15:05:42

标签: c# c++ sockets interop marshalling

我目前正在构建一个通过套接字与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 caracter不出现在C#端?

1 个答案:

答案 0 :(得分:5)

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

如果XML声明在真正的UTF-16时声明为UTF-8,则可能会遇到问题。

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