我在不同平台(我这里是Windows和Linux)上遇到了编码问题。在Windows上,wchar_t的大小为2个字节,而在Linux上为4个字节。如何“标准化”wchar_t以使它在两个平台上具有相同的大小?如果没有额外的库,实现起来难吗?目前,我正在使用printf/wprintf API。数据通过套接字通信发送。谢谢。
如果您想在不同平台和架构之间发送Unicode数据,我建议使用UTF-8编码和(8位)char
。 UTF-8具有一些优点,例如没有字节序问题(UTF-8只是一个纯粹的字节序列,而UTF-16和UTF-32可以是小端或大端...)。
在Windows上,只需在Win32 API的边界处将UTF-8文本转换为UTF-16(因为Windows API通常使用UTF-16)。 您可以使用MultiByteToWideChar()
API来执行此操作。
iconv_open("UTF-8", "WCHAR_T")
打开一个iconv()
转换描述符,将wchar_t
字符串转换为UTF-8字符串(反之亦然)。 - caf
wchar_t
做的有用的事情不具备可移植性,而你可以使用wchar_t
做的可移植的事情又没有什么用。抱歉,请使用其他方法。 - Dietrich Epp