2

如何从 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然?

是否有任何用于此目的的跨平台源代码?

4

3 回答 3

6

是的,在<cstdlib>你有mbstowcs()and wcstombs()

我之前已经发布了一些关于如何使用它的代码,也许这很有帮助。确保您运行该函数两次,一次获取长度,一次进行实际转换。(这里对函数的含义进行了一些讨论std::vector<char>。)而不是手动 char 数组,我可能更喜欢or std::vector<wchar_t>,来考虑它。

请注意,wchar_t这与 Unicode 无关。如果需要 Unicode,则需要wchar_t使用单独的库(如iconv())进一步从 Unicode 转换为 Unicode,并且不要wchar_t用作 Unicode 代码点的数据类型。相反,uint32_t在遗留系统或char32_t现代系统上使用。

于 2011-09-07T11:44:18.363 回答
1

Apparently this works, I don't know if it will always work or if it's a coincidence, but I thought it was worth showing:

const char* c = "hey yo";
wstring s(c, c + 6);

wcout << s << endl;
wcin.get();

prints

hey yo
于 2011-09-07T11:47:37.207 回答
0

Look at libraries like ICU and iconv if you really are using Unicode and not just 16 bit characters. That is Unicode does not just deal with single characters not even 16 bit ones as plain wchar_t does.

于 2011-09-07T11:47:02.060 回答