mbsrtowcs преуспевает, но как печатать char на char

Я на Mac OS X, использую clang ++ 6.0.

Я могу напечатать std :: string символов Thai на моей консоли. Я могу преобразовать его в массив широких символов, используя mbsrtowcs (). Но печать за символом показывает только вопросительные знаки «?». Я не должен понимать что-то об этом.

Может ли кто-нибудь любезно посоветовать, как я могу напечатать каждый символ, или это возможно? Я знаю, что система знает символы, потому что она может печатать их в виде массива широких символов (см. Вывод ниже).

Код:

#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;
}

Выход:

Your prefered locale is:
Your default locale is: C
กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยา มหาดิลกภพ  นพรัตนราชธานีบูรีรมย์ อุดมราชนิเวศน์มหาสถาน อมรพิมานอวตารสถิต  สักกะทัตติยวิษณุกรรมประสิทธิ์
mbsrtowcs success! number of wchars written: 420
The converted string:
กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยา มหาดิลกภพ  นพรัตนราชธานีบูรีรมย์ อุดมราชนิเวศน์มหาสถาน อมรพิมานอวตารสถิต  สักกะทัตติยวิษณุกรรมประสิทธิ์
The converted characters:
?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]