LINUX.ORG.RU

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

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

Тогда как UTF-8 локаль ломает совместимость со всеми 1-байтными кодировками

Какую совместимость, при каких условиях? Можно сделать функцию API. которая позволяет выбрать кодовую таблицу ANSI, если программа выбирает CP_UTF8 — следовательно она знает, как работать с юникодом, если выбирает что-то другое — не знает. Старые программы выбирают CP1251 и работают как работали, а система прозрачно конвертирует их вывод в UTF8. Новые программы делают один API-вызов при инициализации а дальше работают как привычно.

Можно не переписывать, а оставить как есть. Если в настройках стоит русская локаль, будет нормально работать с CP1251.

Тогда не будет возможности работать с символами за пределами CP1251, типа греческих букв без полного переписывания приложения. А вот в предложенном варианте — достаточно всего лишь поменять кодовую таблицу на UTF8 и исправить все места, где используется предположение, что 1 символ == 1 байт, которых может и не быть в принципе, если программа не работает со строками — и она продолжит работать. Объём исправлений не больше чем для локализации программы на другой язык, где требуются символы с переменной длиной.

Кроме того, ввод wchar_t ломает совместимость со стандартом C++ и требует переписывания программ, до этого успешно работавших с юникодом (пример выше)

И где противоречия?

Какие противоречия? Я тебе сказал, что есть переменные окружения, ты спросил где они, я показал, что даже в Windows они есть.

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

Тогда как UTF-8 локаль ломает совместимость со всеми 1-байтными кодировками

Какую совместимость, при каких условиях? Можно сделать функцию API. которая позволяет выбрать кодовую таблицу ANSI, если программа выбирает CP_UTF8 — следовательно она знает, как работать с юникодом, если выбирает что-то другое — не знает. Старые программы выбирают CP1251 и работают как работали, а система прозрачно конвертирует их вывод в UTF8. Новые программы делают один API-вызов при инициализации а дальше работают как привычно.

Можно не переписывать, а оставить как есть. Если в настройках стоит русская локаль, будет нормально работать с CP1251.

Тогда не будет возможности работать с символами за пределами CP1251, типа греческих букв без полного переписывания приложения. А вот в предложенном варианте — достаточно всего лишь поменять кодовую таблицу на UTF8 и исправить все места, где используется предположение, что 1 символ == 1 байт, которых может и не быть в принципе, если программа не работает со строками — и она продолжит работать. Объём исправлений не больше чем для локализации программы на другой язык, где требуются символы с переменной длиной.

И где противоречия?

Какие противоречия? Я тебе сказал, что есть переменные окружения, ты спросил где они, я показал, что даже в Windows они есть.