我在Mac OS X上,使用clang ++ 6.0。
我可以在控制台上打印泰语字符的std :: string。我可以使用mbsrtowcs()将其转换为宽字符数组。但是,逐个字符打印仅显示问号“?”。我一定不明白这一点。
有人可以建议我如何打印每个字符,或者可以吗?我知道系统知道字符,因为它可以将它们打印成宽字符数组(请参见下面的输出)。
代码:
bits
输出:
#include <iostream>
using namespace std;
int main ()
{
cout << "Your prefered locale is: " << locale("").name() << endl;
cout << "Your default locale is: " << locale().name() << endl;
// you need to imbue wcout with en_US.UTF-8, since fileencoding is en_US.UTF-8, and so these wide characters are too.
wcout.imbue(locale("en_US.UTF-8") );
// The full name of Bangkok.
const string s{"กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยา มหาดิลกภพ นพรัตนราชธานีบูรีรมย์ อุดมราชนิเวศน์มหาสถาน อมรพิมานอวตารสถิต สักกะทัตติยวิษณุกรรมประสิทธิ์"};
cout << s << endl;
// Let's try to convert this.
mbstate_t mbs;
char const *p = s.c_str();
wchar_t wc[s.length()];
size_t wchars_written = mbsrtowcs(wc,&p,s.length(),&mbs);
wcout.imbue(locale());
if (NULL == p) cout << "Problem with mbsrtowcs : " << p << endl;
else cout << "mbsrtowcs success! number of wchars written: " << wchars_written << endl;
wcout << "The converted string: " << endl << wc << endl;
cout << "The converted characters: " << endl ;
for (auto&& c: wc) wcout << c << L'\t';
cout <<endl;
return 0;
}