ПРИВЕТ МИР! - как это вывести в unicode????
Добавлено: 01 июн 2006, 02:25
Вот такая задачка:
В Linux (kubuntu 5.10 полностью обновленная )
пытаюсь вывести "Привет, мир!" в Unicode с помощью wcout (поток вывода для юникода). Получаю кракозяблы.
Получаю вывод
Локаль системы ru_RU.UTF-8
Используется gcc version 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9)
Исходный файл в кодировке utf-8 (если сохранить в koi например, компилятор ругается и не компилирует)
С помощью google нашел кучу ссылок с описанием проблемы, но без решений, и ссылки на
http://gcc.gnu.org/ml/gcc-bugs/2004-03/msg02144.html
http://lists.debian.org/debian-gcc/2002 ... 00049.html
... а так же упоминание о том, что баг был в gcc 3.3 и к gcc 3.4 уже исправлен.
А сейчас собственно вопросы:
Это действительно баг gcc, или, что более вероятно, у меня руки кривые?
В каком месте кривые?
Как более менее красиво вывести unicode на консоль?
Заранее спасибо
В Linux (kubuntu 5.10 полностью обновленная )
пытаюсь вывести "Привет, мир!" в Unicode с помощью wcout (поток вывода для юникода). Получаю кракозяблы.
Код: Выделить всё
#include <stdio>
#include <iostream>
#include <locale>
int main ()
{
std::locale loc("");
loc = wcout.getloc();
cout<< endl<< loc.name()<<endl; //выводим имя локали
wcout << L"Привет, мир!(world)" << endl; // вот так по идее работать не должно, должны быть кракозяблы
wcout.imbue(std::locale("") ); // меняем локаль на локаль системы
loc = wcout.getloc();
cout<< endl<< loc.name()<<endl; //выводим имя локали
wcout << L"Привет, мир!(world)" << endl; // вот сдесь должен был быть текст!!!!!
wcout.imbue(std::locale("ru_RU.KOI8-R") );
loc = wcout.getloc();
cout<< endl<< loc.name()<<endl;
wcout << L"Привет, мир!(world)" << endl; // а вот сдесь должны были быть кракозяблы, но уже не такие
}
Код: Выделить всё
C
@825B, <8@!(world)
ru_RU.UTF-8
@825B, <8@!(world)
ru_RU.KOI8-R
@825B, <8@!(world)
Используется gcc version 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9)
Исходный файл в кодировке utf-8 (если сохранить в koi например, компилятор ругается и не компилирует)
С помощью google нашел кучу ссылок с описанием проблемы, но без решений, и ссылки на
http://gcc.gnu.org/ml/gcc-bugs/2004-03/msg02144.html
http://lists.debian.org/debian-gcc/2002 ... 00049.html
... а так же упоминание о том, что баг был в gcc 3.3 и к gcc 3.4 уже исправлен.
А сейчас собственно вопросы:
Это действительно баг gcc, или, что более вероятно, у меня руки кривые?
В каком месте кривые?
Как более менее красиво вывести unicode на консоль?
Заранее спасибо