通过套接字从 C++ wchar_t 到 C# char
Posted
技术标签:
【中文标题】通过套接字从 C++ wchar_t 到 C# char【英文标题】:From C++ wchar_t to C# char via socket 【发布时间】:2009-06-03 15:05:42 【问题描述】:我目前正在构建一个通过套接字与 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# 端?
【问题讨论】:
【参考方案1】:看起来它发送的是 UTF-16,而不是 UTF-8,这是有道理的 - wchar_t
基本上是一个 16 位类型(在 Windows 中),并且您正在尽可能“原始”地发送它告诉。我建议,如果您要将数据转换为 XDocument
或 XmlDocument
,请使用二进制数据 - 框架知道如何自动检测 XML 文件 (IIRC) 的 UTF-16。
如果 XML 声明将其声明为 UTF-8,而实际上它是 UTF-16,那么您可能会遇到问题。
或者,在 C++ 端使用合适的编码类真正发送 UTF-8。这需要额外的处理时间,但如果考虑到这一点,通常会节省带宽。
【讨论】:
以上是关于通过套接字从 C++ wchar_t 到 C# char的主要内容,如果未能解决你的问题,请参考以下文章
使用 ctypes 和 wchar_t 时如何从 C++ 获取字符串到 python?