LINUX.ORG.RU

История изменений

Исправление saahriktu, (текущая версия) :

В статье по каждому пункту есть пояснения. В Си классические строковые функции оставлены однобайтными, их логику никто не менял. Им можно скормить строки в однобайтных кодировках и результат будет ровно такой же как и в 1980-х. Для работы с юникодом в ANSI C ввели ряд других функций, которые работают с wchar_t*. Всякие сторонние библиотеки наподобие ICU не входят ни в какие стандарты. А wchar_t* входит в ANSI C.

И безграмотны как раз те, кто путают кодировки (UTF-8, UTF-16 и UTF-32) и типы char* и wchar_t*.

Без setlocale() Сишные программы не работают как положено ни с KOI8-R в ncurses, ни c юникодом. Просто потому, что они не читают все переменные окружения на старте. И их нужно принудительно просить их прочитать если это нужно. Если Вы считаете иначе, то, скорее всего, Вы просто какие-то книжки по Си читали, но так и не добрались до написания кода в GNU/Linux. В винде оно может иначе работать, не проверял. У меня и винды-то нет. А вот в GNU/Linux всё работает именно так, как написано в статье.

Исходная версия saahriktu, :

В статье по каждому пункту есть пояснения. В Си классические функции оставлены однобайтными, их логику никто не менял. Им можно скормить строки в однобайтных кодировках и результат будет ровно такой же как и в 1980-х. Для работы с юникодом в ANSI C ввели ряд других функций, которые работают с wchar_t*. Всякие сторонние библиотеки наподобие ICU не входят ни в какие стандарты. А wchar_t* входит в ANSI C.

И безграмотны как раз те, кто путают кодировки (UTF-8, UTF-16 и UTF-32) и типы char* и wchar_t*.

Без setlocale() Сишные программы не работают как положено ни с KOI8-R в ncurses, ни c юникодом. Просто потому, что они не читают все переменные окружения на старте. И их нужно принудительно просить их прочитать если это нужно. Если Вы считаете иначе, то, скорее всего, Вы просто какие-то книжки по Си читали, но так и не добрались до написания кода в GNU/Linux. В винде оно может иначе работать, не проверял. У меня и винды-то нет. А вот в GNU/Linux всё работает именно так, как написано в статье.