我遇到了在不同平台上编码的问题(在我的情况下是Windows和Linux)。在Windows上,wchar_t的大小是2个字节,而在Linux上则是4个字节。如何将两个平台的wchar_t“标准化”为相同的大小?没有额外的库,难以实现吗?目前,我的目标是printf / wprintf API。数据通过套接字通信发送。谢谢。
答案 0 :(得分:3)
如果您想在不同的平台和架构上发送Unicode数据,我建议使用 UTF-8 编码和(8位)char
。 UTF-8有一些优点,比如没有endiannes问题(UTF-8只是一个简单的字节序列,而UTF-16和UTF-32都可以是little-endian或big-endian ......)。
在Windows上,只需在Win32 API的边界将UTF-8文本转换为UTF-16(因为Windows API倾向于使用UTF-16)。您可以使用MultiByteToWideChar()
API。
答案 1 :(得分:0)
要解决这个问题,我认为您必须在传输之前将所有字符串转换为UTF-8。在Windows上,您将使用WideCharToMultiByte函数将wchar_t字符串转换为UTF-8字符串,并使用MultiByteToWideChar将UTF-8字符串转换为wchar_t字符串。
在Linux上,事情并不那么简单。您可以使用函数wctomb和mbtowc,但是它们转换为/来自哪些取决于基础语言环境设置。因此,如果您希望这些转换为UTF-8和Unicode,那么您需要确保将语言环境设置为使用UTF-8编码。
This文章也可能是一个很好的资源。