4

我在不同平台(在我的情况下是 Windows 和 Linux)上遇到了编码问题。在 Windows 上,wchar_t 的大小是 2 个字节,而在 Linux 上是 4 个字节。如何将 wchar_t “标准化”为两个平台的相同大小?没有额外的库很难实现吗?现在,我的目标是 printf/wprintf API。数据通过套接字通信发送。谢谢你。

4

2 回答 2

3

如果您想跨不同平台和架构发送 Unicode 数据,我建议使用UTF-8编码和 (8-bit) chars。UTF-8 有一些优点,比如没有字节序问题(UTF-8 只是一个普通的字节序列,而 UTF-16 和 UTF-32 都可以是小端或大端......)。

在 Windows 上,只需在 Win32 API 的边界将 UTF-8 文本转换为 UTF-16(因为 Windows API 倾向于使用 UTF-16)。您可以MultiByteToWideChar()为此使用 API。

于 2013-07-29T17:42:23.877 回答
0

为了解决这个问题,我认为您必须在传输之前将所有字符串转换为 UTF-8。在 Windows 上,您将使用WideCharToMultiByte函数将 wchar_t 字符串转换为 UTF-8 字符串,并使用MultiByteToWideChar将 UTF-8 字符串转换为 wchar_t 字符串。

在 Linux 上,事情并不那么简单。您可以使用函数wctombmbtowc,但是它们转换为/转换的内容取决于底层语言环境设置。因此,如果您希望它们与 UTF-8 和 Unicode 相互转换,那么您需要确保将语言环境设置为使用 UTF-8 编码。

这篇文章也可能是一个很好的资源。

于 2013-07-29T17:56:57.727 回答