Здравствуйте!
Всем известен пример, с которого начинается изучение чуть-ли не любого языка программирования: напечатать строку "hello, world!" на экран. А как вывести на экран это же приветствие, но кириллицей? "Привет мир" с помощью функции printf, puts и т.д.? Имеется ввиду язык Си.
printf("Привет мир");
>printf("Привет мир");\n забыли ;-)
>Здравствуйте!
>Всем известен пример, с которого начинается изучение чуть-ли не любого языка
>программирования: напечатать строку "hello, world!" на экран. А как вывести на
>экран это же приветствие, но кириллицей? "Привет мир" с помощью функции
>printf, puts и т.д.? Имеется ввиду язык Си.Также и вывести. (Про проблемы с кодировками в hello world слышал только в Windows, там ещё надо перекодировать CharToOem() или как-то так).
>Также и вывести.Да ну? А строку в исходник в чем писать, не подскажете?
В koi8-r или в cp1251? А может, в utf-8? А почему бы не в cp866? А если в ISO?Правильный вариант - использовать gettext и не писать локазизованные строки в исходниках вообще. На крайний случай можно конвертить строки iconv'ом в локаль пользователя, но это не поможет, если у него не русская локаль.
>>Также и вывести.
>
>Да ну? А строку в исходник в чем писать, не подскажете?
>В koi8-r или в cp1251? А может, в utf-8? А почему бы
>не в cp866? А если в ISO?
>
>Правильный вариант - использовать gettext и не писать локазизованные строки в исходниках
>вообще. На крайний случай можно конвертить строки iconv'ом в локаль пользователя,
>но это не поможет, если у него не русская локаль.пишешь функцию tr, передаешь ей переменную LANG, анализируешь ее на язык, и если русский на кодировку, потом делаешь iconv если нужно. если не русский то ищешь файл с готовой трансляцией находишь там необходимый перевод и печатаешь его. можно и без iconv, только придеться держать базу на все русские кодировки.
и у тебя получается интернациональный хелло ворд.
>пишешь функцию tr, передаешь ей переменную LANG, анализируешь ее на язык, и
>если русский на кодировку, потом делаешь iconv если нужно. если не
>русский то ищешь файл с готовой трансляцией находишь там необходимый перевод
>и печатаешь его. можно и без iconv, только придеться держать базу
>на все русские кодировки.
>iconv - есть такая функция в Си или его библиотеках?
>iconv - есть такая функция в Си или его библиотеках?это библиотека libiconv
Ну хорошо.
А зачем тогда нужны функции для работы с широкими символами, такие как vfwprintf(...)?
Тут про них никто не упомянул
>Ну хорошо.
>А зачем тогда нужны функции для работы с широкими символами, такие как
>vfwprintf(...)?
>Тут про них никто не упомянулWide characters это wide characters, а multibyte это multibyte.
В целом с wide characters геморроя больше, поэтому смысла их рассматривать здесь нет.
>Да ну? А строку в исходник в чем писать, не подскажете?
>В koi8-r или в cp1251? А может, в utf-8? А почему бы
>не в cp866? А если в ISO?utf-8, разве что-то другое актуально?
>utf-8, разве что-то другое актуально?А подумать?
>>utf-8, разве что-то другое актуально?
>
>А подумать?Доюавить в систему поддержку юникода,
UTF-8 в часности,
у меня нет проблет,
а у Вас?
>Доюавить в систему поддержку юникода,
>UTF-8 в часности,
>у меня нет проблет,
>а у Вас?А еще раз подумать? И при чем здесь поддержка UTF8 в системе?
#include <stdio.h>
#include <wchar.h>
#include <locale.h>int main(int argc, char **argv)
{
setlocale(LC_ALL, "");
wprintf(L"%S\n", L"Привет мир!");
return 0;
}Компилятор сам сделает преобразование строк из локали в юникод (префикс L) и сохранит в сегменте текста юникодные строки. Функция wprintf сделает нужные преобразования согласно текущей локали и везде выведет строку верно (если текущая локаль позволяет). Главное, чтобы при наборе исходника и компиляции использовалась одна и та же локаль.
>>Также и вывести.
>
>Да ну? А строку в исходник в чем писать, не подскажете?
>В koi8-r или в cp1251? А может, в utf-8? А почему бы
>не в cp866? А если в ISO?
>
>Правильный вариант - использовать gettext и не писать локазизованные строки в исходниках
>вообще. На крайний случай можно конвертить строки iconv'ом в локаль пользователя,
>но это не поможет, если у него не русская локаль.
Наконец-то хоть кто-то занялся локализацией нужных программ! Так держать!