通过套接字从 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 中),并且您正在尽可能“原始”地发送它告诉。我建议,如果您要将数据转换为 XDocumentXmlDocument,请使用二进制数据 - 框架知道如何自动检测 XML 文件 (IIRC) 的 UTF-16。

如果 XML 声明将其声明为 UTF-8,而实际上它是 UTF-16,那么您可能会遇到问题。

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

【讨论】:

以上是关于通过套接字从 C++ wchar_t 到 C# char的主要内容,如果未能解决你的问题,请参考以下文章

使用 ctypes 和 wchar_t 时如何从 C++ 获取字符串到 python?

SWIG:对 Java 的 wchar_t 支持

Visual Studio C++ 到 C# 套接字程序

如何在消息框中显示来自 C# 的带有 WCHAR* 的 C 函数

C#项目没有为自己写的c++ dll定义入口点

将数据从 C++ 发送到 C# [重复]