URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7554
[ Назад ]

Исходное сообщение
"hello, world!"

Отправлено rasmon , 20-Авг-08 15:16 
Здравствуйте!
Всем известен пример, с которого начинается изучение чуть-ли  не любого языка программирования: напечатать строку "hello, world!" на экран. А как вывести на экран это же приветствие, но кириллицей? "Привет мир" с помощью функции printf, puts и т.д.? Имеется ввиду язык Си.

Содержание

Сообщения в этом обсуждении
"hello, world!"
Отправлено eee , 20-Авг-08 15:19 
printf("Привет мир");


"hello, world!"
Отправлено phpcoder , 20-Авг-08 15:23 
>printf("Привет мир");

\n забыли ;-)


"hello, world!"
Отправлено phpcoder , 20-Авг-08 15:19 
>Здравствуйте!
>Всем известен пример, с которого начинается изучение чуть-ли  не любого языка
>программирования: напечатать строку "hello, world!" на экран. А как вывести на
>экран это же приветствие, но кириллицей? "Привет мир" с помощью функции
>printf, puts и т.д.? Имеется ввиду язык Си.

Также и вывести. (Про проблемы с кодировками в hello world слышал только в Windows, там ещё надо перекодировать CharToOem() или как-то так).



"hello, world!"
Отправлено Guest , 20-Авг-08 19:31 
>Также и вывести.

Да ну? А строку в исходник в чем писать, не подскажете?
В koi8-r или в cp1251? А может, в utf-8? А почему бы не в cp866? А если в ISO?

Правильный вариант - использовать gettext и не писать локазизованные строки в исходниках вообще. На крайний случай можно конвертить строки iconv'ом в локаль пользователя, но это не поможет, если у него не русская локаль.


"hello, world!"
Отправлено NuINu , 21-Авг-08 13:42 
>>Также и вывести.
>
>Да ну? А строку в исходник в чем писать, не подскажете?
>В koi8-r или в cp1251? А может, в utf-8? А почему бы
>не в cp866? А если в ISO?
>
>Правильный вариант - использовать gettext и не писать локазизованные строки в исходниках
>вообще. На крайний случай можно конвертить строки iconv'ом в локаль пользователя,
>но это не поможет, если у него не русская локаль.

пишешь функцию tr, передаешь ей переменную LANG, анализируешь ее на язык, и если русский на кодировку, потом делаешь iconv если нужно. если не русский то ищешь файл с готовой трансляцией находишь там необходимый перевод и печатаешь его. можно и без iconv, только придеться держать базу на все русские кодировки.

и у тебя получается интернациональный хелло ворд.


"hello, world!"
Отправлено rasmon , 21-Авг-08 16:41 

>пишешь функцию tr, передаешь ей переменную LANG, анализируешь ее на язык, и
>если русский на кодировку, потом делаешь iconv если нужно. если не
>русский то ищешь файл с готовой трансляцией находишь там необходимый перевод
>и печатаешь его. можно и без iconv, только придеться держать базу
>на все русские кодировки.
>

iconv - есть такая функция в Си или его библиотеках?



"hello, world!"
Отправлено Guest , 21-Авг-08 16:45 
>iconv - есть такая функция в Си или его библиотеках?

это библиотека libiconv


"hello, world!"
Отправлено rasmon , 27-Авг-08 22:08 
Ну хорошо.
А зачем тогда нужны функции для работы с широкими символами, такие как vfwprintf(...)?
Тут про них никто не упомянул



"hello, world!"
Отправлено Guest , 27-Авг-08 22:17 
>Ну хорошо.
>А зачем тогда нужны функции для работы с широкими символами, такие как
>vfwprintf(...)?
>Тут про них никто не упомянул

Wide characters это wide characters, а multibyte это multibyte.

В целом с wide characters геморроя больше, поэтому смысла их рассматривать здесь нет.


"hello, world!"
Отправлено eee , 21-Авг-08 17:25 
>Да ну? А строку в исходник в чем писать, не подскажете?
>В koi8-r или в cp1251? А может, в utf-8? А почему бы
>не в cp866? А если в ISO?

utf-8, разве что-то другое актуально?


"hello, world!"
Отправлено hhh , 22-Авг-08 21:27 
>utf-8, разве что-то другое актуально?

А подумать?


"hello, world!"
Отправлено eee , 23-Авг-08 08:40 
>>utf-8, разве что-то другое актуально?
>
>А подумать?

Доюавить в систему поддержку юникода,
UTF-8 в часности,
у меня нет проблет,
а у Вас?


"hello, world!"
Отправлено hhh , 27-Авг-08 17:32 
>Доюавить в систему поддержку юникода,
>UTF-8 в часности,
>у меня нет проблет,
>а у Вас?

А еще раз подумать? И при чем здесь поддержка UTF8 в системе?


"hello, world!"
Отправлено Alexander S. Salieff , 11-Сен-08 03:44 
#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'ом в локаль пользователя,
>но это не поможет, если у него не русская локаль.


"hello, world!"
Отправлено BigHo , 25-Авг-08 12:30 
Наконец-то хоть кто-то занялся локализацией нужных программ! Так держать!