c# - 通过套接字从 C++ wchar_t 到 C# char

标签 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 字符没有出现在 C# 端?

最佳答案

看起来它发送的是 UTF-16,而不是 UTF-8,这是有道理的 - wchar_t 基本上是 16 位类型(在 Windows 中),并且您将其发送为“原始”据我所知。我建议,如果您要将数据转换为 XDocumentXmlDocument,请使用二进制数据进行操作 - 框架知道如何自动检测 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/

相关文章:

c# - 整个解决方案的Visual Studio快速切换平台

c++ - 读取私有(private)变量类成员

c++ - 如果字符串在数组中,这样做吗?

c# - 在没有递归的情况下匹配递归模式

c# - 无法解决这个 html 生成难题

c++ - 使用 for_each 与 range-for 有什么好处?

C++如何通过套接字发送结构?

具有多个客户端的 Java Socket 编程

java - 从套接字创建密码流时应用程序死锁

c# - 如何在 .NET 和 vb6 之间读写可互操作的字符串到二进制文件