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 ввожу, почему не корректно выводиться?

★★

Re: с++, linux, unicode\utf

#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 ()
Ответ на: Re: с++, linux, unicode\utf от Deleted

Re: с++, linux, unicode\utf

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

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

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

f3ex ★★ ()
Ответ на: Re: с++, linux, unicode\utf от f3ex

Re: с++, linux, unicode\utf

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

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

Deleted ()
Ответ на: Re: с++, linux, unicode\utf от f3ex

Re: с++, linux, unicode\utf

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

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

Deleted ()

Re: с++, linux, unicode\utf

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

dmitry_vk ★★★ ()
Ответ на: Re: с++, linux, unicode\utf от Deleted

Re: с++, linux, unicode\utf

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

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

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

f3ex ★★ ()
Ответ на: Re: с++, linux, unicode\utf от f3ex

Re: с++, linux, unicode\utf

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

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

legolegs ★★★★★ ()
Ответ на: Re: с++, linux, unicode\utf от legolegs

Re: с++, linux, unicode\utf

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

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

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