Unicode转换-iconv_xxx与mbstowcs/wcstombs 我正在把一些遗留的C++代码移植到Android平台上。在这样做时,我注意到代码使用iconv_xxx()例程来处理Unicode转换。碰巧Android NDK在默认情况下没有iconv.h。我可以下载并构建libiconv的源代码。然而,我只是想知道为什么当一个几乎所有平台上的C++编译器都支持MSTOWCS、WCSTOBS时,人们甚至会使用ICONVXXXX函数。以及相关的例行程序。iconv_xxx函数比mbsXXXwbsXXX例程有什么优势吗?关于。

Unicode转换-iconv_xxx与mbstowcs/wcstombs 我正在把一些遗留的C++代码移植到Android平台上。在这样做时,我注意到代码使用iconv_xxx()例程来处理Unicode转换。碰巧Android NDK在默认情况下没有iconv.h。我可以下载并构建libiconv的源代码。然而,我只是想知道为什么当一个几乎所有平台上的C++编译器都支持MSTOWCS、WCSTOBS时,人们甚至会使用ICONVXXXX函数。以及相关的例行程序。iconv_xxx函数比mbsXXXwbsXXX例程有什么优势吗?关于。,c++,unicode,android-ndk,C++,Unicode,Android Ndk,mb/wc函数在wchar\t编码(平台特定)和多字节编码(平台和区域特定)之间进行转换 在x86上的Linux上,wc很可能是UTF-32LE,mb很可能是UTF-8,但远不能保证。在Windows上,wc是UTF-16LEmb很可能是机器的默认语言环境(ANSI)代码页,而且不太可能是UTF-8 因此,如果要转换为已知的特定编码或从已知的特定编码转换为特定编码,则必须使用iconv()mbstowcs是全有或全无转换。它们基于C标准库的语言环境。我猜iconv支持默认的部分结果或字符不转换的

mb/
wc
函数在wchar\t编码(平台特定)和多字节编码(平台和区域特定)之间进行转换

在x86上的Linux上,
wc
很可能是UTF-32LE,
mb
很可能是UTF-8,但远不能保证。在Windows上,
wc
是UTF-16LE
mb
很可能是机器的默认语言环境(ANSI)代码页,而且不太可能是UTF-8


因此,如果要转换为已知的特定编码或从已知的特定编码转换为特定编码,则必须使用
iconv()

mbstowcs
是全有或全无转换。它们基于C标准库的语言环境。我猜iconv支持默认的部分结果或字符不转换的部分结果,并且iconv支持源代码和结果编码的显式规范。