Dra*_*kar 2 c# c++ sockets interop marshalling
我目前正在构建一个C++应用程序,它通过套接字与C#应用程序进行通信.我的C++应用程序通过套接字发送wchar_t*.
以下是发送内容的概述:
<!-- Normal xml file--
Run Code Online (Sandbox Code Playgroud)
这是我在另一边收到的(我做一个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-
Run Code Online (Sandbox Code Playgroud)
这是一个编组问题吗?你说什么?为什么它是0扩展的,为什么unicode caracter不出现在C#端?
看起来它正在发送UTF-16,而不是UTF-8,这是有道理的 - wchar_t基本上是一个16位类型(在Windows中),并且你把它发送到"原始"据我所知.我建议如果您要将数据转换为XDocument或者XmlDocument,您使用二进制数据 - 框架知道如何自动检测UTF-16的XML文件(IIRC).
如果XML声明在真正的UTF-16时声明它是UTF-8,那么你可能会遇到问题.
或者,在C++端使用合适的编码类来真正发送UTF-8.这将需要额外的处理时间,但如果需要考虑,通常可以节省带宽.
| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |