我需要用C ++编写的代码将wchar_t*
中给出的字符串转换为UTF-16字符串。它必须适用于Windows和Linux。我在搜索过程中浏览了很多网页,但我还不清楚这个主题。
据我所知,我需要:
setlocale
。wcstombs
将wchar_t
转换为UTF-16字符串。setlocale
以恢复以前的区域设置。您是否知道我可以通过便携方式(Windows和Linux)将wchar_t*
转换为UTF-16的方式?
答案 0 :(得分:8)
在C ++ 03中没有单一的跨平台方法(不是没有库)。这部分是因为wchar_t
本身并不是跨平台的相同事物。在Windows下,wchar_t
是16位值,而在其他平台上,它通常是32位值。所以你需要两个不同的代码路径来完成它。
答案 1 :(得分:5)
C ++ 11的std::codecvt_utf16
应该可行。我想。
std :: codecvt_utf16是一个std :: codecvt facet,它封装了UTF-16编码的字节串和UCS2或UCS4字符串之间的转换(取决于Elem的类型)。
答案 2 :(得分:3)
您可以假设wchar_t在非Windows世界中是utf-32。在Linux和Mac OS X以及大多数* nix系统上都是如此(很少有例外,在系统上你可能永远不会碰到: - )
Windows上的wchar_t是utf-16。所以在Windows上,转换功能只能做一个memcpy: - )
在其他一切方面,转换是算法的,非常简单。所以不需要第三方图书馆的支持。
以下是基本算法:http://unicode.org/faq/utf_bom.html#utf16-3
如果你不想自己编写,你可能会找到十几个不同的实现: - )
答案 3 :(得分:2)
问题在于wchar_t
相当不明确。您可以使用GNU libiconv来执行您想要的操作。它接受特殊编码名称"wchar_t"
作为源编码和目标编码。这样,它可以移植到Windows和Linux以及其他可以提供libiconv的地方。
答案 4 :(得分:-1)
g ++编译器似乎支持wcstombs?