Как отобразить L & quot; أَبْجَدِيَّة عَرَبِيَّة 中文 & quot; используя wcout?

Я хочу отобразить арабское сообщение, смешанное с китайским, используя wcout.

Следующий код в порядке:

#include <iostream>

using namespace std;

int main()
{
wcout.imbue(locale("chs"));
wcout << L"中文"; // OK
}

Однако следующий код не работает:

#include <iostream>

using namespace std;

int main()
{
wcout.imbue(locale(/* What to place here ??? */));
wcout << L"أَبْجَدِيَّة عَرَبِيَّة‎中文"; // Output nothing. VC++ 2012 on Win7 x64
// Why does the main advantage of unicode not apply here?
}

Я думаю, что концепция кодовых страниц должна быть устаревшей после принятия юникода.

Q1. Каков механизм отображения такого текста?

Q2. Почему Windows, как ОС на основе Unicode, не поддерживает вывод символов Unicode в своем окне консоли?

8

Решение

CRT будет обрабатывать весь вывод в файлы как ANSI по умолчанию. Вы можете изменить это с помощью этой строки в начале вашей программы

_setmode(_fileno(stdout), _O_WTEXT);

Хорошая ссылка @ http://www.siao2.com/2008/03/18/8306597.aspx

Просто для справки двунаправленная языковая поддержка ограничена в большинстве командных строк, и, насколько я понимаю, это ограничение, вызывающее эту проблему здесь. Почему это не поддерживается, я не могу ответить.

7

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

Я только что прочитал эту статью

«К резюме …

Если вы используете Visual C ++, вы не можете использовать UTF-8 для печати текста в std :: cout.

Если вы все еще хотите, пожалуйста, прочитайте эту удивительно длинную статью о том, как заставить работать wcout и cout, но на самом деле это не дает простого решения — в конце концов, мы переходим к переопределению потоковых буферов … »http://alfps.wordpress.com/2011/12/08/unicode-part-2-utf-8-stream-mode/

(из этого блога http://blog.cppcms.com/post/105)

3

Вы можете попробовать это:

Я предполагаю, что вы смогли отрисовать только китайский текст. Это означает, что у вас есть файлы китайских шрифтов.

Пожалуйста, попробуйте текст только на арабском языке. Если вы можете выполнить рендеринг, это означает, что в вашей системе есть арабский шрифт.

Но когда вы смешиваете это, арабский + китайский, вам нужно принудительно выбрать файл шрифта, который имеет оба набора глифов. Я думаю, что файл шрифтов по умолчанию, подобранный wcout, не имеет арабских символов.

Я предполагаю, что вы можете получить коробки для арабских юникодов.

1

#include <iostream>
#include <io.h>
#include <fcntl.h>

int main() {
_setmode(_fileno(stdout), _O_U16TEXT); // or _O_WTEXT
std::wcout << L"أَبْجَدِيَّة عَرَبِيَّة‎中文" << std::endl;
}

http://www.cplusplus.com/forum/beginner/126557/

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