История изменений
Исправление 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 они есть.