Локализация консольной программы на с

Модератор: Модераторы разделов

Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

Локализация консольной программы на с

Сообщение kt315e »

Надо чтобы сообщения выводимые printf отображались на консоли с UTF-8, а вывод в файл был в KOI8. Исходный текст программы в KOI8. Как правильно делать? Компилятор gcc. Посоветуйте что почитать.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Локализация консольной программы на с

Сообщение Zeus »

Проще всего держать два варианта строк: в koi8 и в utf8. Например в файлах.
И выводить их куда надо: одни - в консоль, другие - в файл.

Ну или man 3 iconv.
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Локализация консольной программы на с

Сообщение sergio »

Поскольку возникновение вопроса кодировок подразумевает, что строки будут не в ASCII, то правильный ответ - использовать gettext для интер-/локализации. И никаких "код программы в кои8". А значит, надо почитать по нему доку и, возможно, что-то прояснится по ходу.

P.S.: Вообще постановка вопроса требует уточнений.
Надо чтобы сообщения выводимые printf отображались на консоли с UTF-8, а вывод в файл был в KOI8. Исходный текст программы в KOI8

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

Язык, догадываюсь по printf, си. С си+ есть возможность поиграться с локалью для вывода в файл отдельно от стандартных потоков.
Плюс вопрос, что выводится в файл таки? Некие данные, или те же сообщения, что на консоль? Текст или бинарник? А то ведь можно этот вывод в файл просто через айконв по конвейеру и направить...
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

Re: Локализация консольной программы на с

Сообщение kt315e »

P.S.: Вообще постановка вопроса требует уточнений.

Код пишу сам в C, речь идет о сообщениях типа:
printf("Сообщение на русском\n");
Чтобы они печатались на консоли UTF-8 правильно, при кодировке исходного кода на KOI8,
и в тоже время в файл можно было выводить в KOI-8.
Сейчас вместо русских букв выводятся вопросики.
Не хочется загромождать код выводом заранее приготовленных строк.

man 3 iconv
Нет записи руководства для iconv в разделе 3
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Локализация консольной программы на с

Сообщение sergio »

kt315e писал(а):
24.05.2008 11:51
Код пишу сам в C, речь идет о сообщениях типа:
printf("Сообщение на русском\n");
Чтобы они печатались на консоли UTF-8 правильно, при кодировке исходного кода на KOI8,
и в тоже время в файл можно было выводить в KOI-8.
Сейчас вместо русских букв выводятся вопросики.

Так и не уточнили, что выводится в файл. Если только сообщения, то сделайте вывод весь в ютф8, программу для работы с файлом запустите через конвейер с iconv и всех делов. Это самое простое.
Переходировать проще будет вывод в файл, а не работу с консолью. В файл один поток идет, а с консолью три.

Не хочется загромождать код выводом заранее приготовленных строк.

Вот для этого геттекст и применяется.

man 3 iconv
Нет записи руководства для iconv в разделе 3

У меня есть. А также iconv_open и прочие. Доку по либс тоже не отменили - айконв туда входит.
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

Re: Локализация консольной программы на с

Сообщение kt315e »

Да сделаю вывод через конвеер. Спасибо.
Спасибо сказали:
Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

Re: Локализация консольной программы на с

Сообщение kt315e »

Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: Локализация консольной программы на с

Сообщение d_n_k »

для локализации давно придуман gettext, не избретайте очередной велосипед.

http://ru.wikipedia.org/wiki/Gettext
все сказанное есть имхо...
Спасибо сказали: