LINUX.ORG.RU

с++, linux, unicode\utf


0

0

Наверно уже было и не раз...

#include <iostream>

using namespace std;

int main(){
wchar_t u_char = L'ё';
cout << "Size of wchar_t: " << sizeof u_char << endl;
wcout << "wcout, u_char: " << u_char << endl;
cout << "cout, u_char: " << u_char << endl;
}


$ ./a.out
Size of wchar_t: 4
wcout, u_char: Q
cout, u_char: 1105

ubuntu, ё - в UTF-8 ввожу, почему не корректно выводиться?

★★

#include <iostream>
#include <locale>

using namespace std;

int main(){
	wchar_t u_char = L'ё';

	locale::global(locale(""));
	wcout << L"Size of wchar_t: " << sizeof u_char << endl;
	wcout << L"wcout, u_char: " << u_char << endl;
	wcout << L"cout, u_char: " << static_cast<int>(u_char) << endl;

	return 0;
}

И крайне желательно в реальном коде в исходниках не использовать ничего, кроме ASCII. Иначе возникнут проблемы.

Deleted
()
Ответ на: комментарий от Deleted

Ок. спасибо... Что-то недогадался локаль установить..

>И крайне желательно в реальном коде в исходниках не использовать ничего, кроме ASCII

А как тогда, допустим, делать меню с кириллическим текстом?

f3ex ★★
() автор топика
Ответ на: комментарий от f3ex

> А как тогда, допустим, делать меню с кириллическим текстом?

Методом хранения локализованных строк в отдельных файлах. Смотри например gettext. А по-другому никак. Подумай что будет, если твой исходник решит скомпилировать кто-то с локалью отличной от той, которая стоит у тебя в системе.

Deleted
()

Желательно при компиляции использовать -finput-charset=utf-8, чтобы не было проблем при компиляции на разных локалях.

dmitry_vk ★★★
()
Ответ на: комментарий от Deleted

согласен про вынос в файлы. Но думаю для курсовой и этого хватит.

>Ещё лучше не смешивать wcout и cout.

Тоже согласен. Просто смущает, что кириллическую строку он выводит корректно (std::cout << "ё" << std::endl;). А символ не хочет...

f3ex ★★
() автор топика
Ответ на: комментарий от f3ex

>Просто смущает, что кириллическую строку он выводит корректно

Это фича UTF8 - даже очень старые программы нормально с ним работают (если не пытаются делать что-то кроме конкатенации ну и не используют всякие GTK1)

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

> Это фича UTF8 - даже очень старые программы нормально с ним работают (если не пытаются делать что-то кроме конкатенации ну и не используют всякие GTK1)

Точно, я как-то не подумал, что топикстартер путает UTF-8 и UTF-32 (который L"some string" в линуксе).

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.