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

时间:2011-09-07 11:42:23

标签: c++ char wchar-t

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

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

3 个答案:

答案 0 :(得分:6)

是的,在<cstdlib>中,您有mbstowcs()wcstombs()

我之前发布过some code如何使用它,也许这有用。确保您运行该功能两次,一次获得长度,一次执行实际转换。 (这里有一些discussion函数的含义。)而不是手工字符数组,我可能更喜欢std::vector<char>std::vector<wchar_t>来考虑它。

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

答案 1 :(得分:1)

显然这是有效的,我不知道它是否会一直有效或是巧合,但我认为值得展示:

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

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

打印

hey yo

答案 2 :(得分:0)

如果您确实使用的是Unicode而不仅仅是16位字符,请查看ICUiconv等库。那就是Unicode不仅仅处理单个字符,甚至不像普通的wchar_t那样处理16位字符。