2 июня 2011 г.

Операция Ы (I) или приключения Java в Азербайджане

Не так давно я писал о приключении Украинской гривны в Java. И вот - вторая серия: приключения азербайджанской буквы ı (I) (произносится примерно как ы). Ни в коем случае ее не стоит путать с аналогичной буквой из Английского языка i (I) - у них разные коды и ... ну просто это разные символы. И вот что странно, с Украинской буквой і (І) никто английскую не путает, а с Азербайджанской - увы ;(

Какие сюрпризы это готовит Java разработчикам - например, если в операционной системе установлены региональные настройки Азербайджанские, то вот такой вот код:
System.out.println("decimal".toUpperCase());
Вернет
DECİMAL
Да-да это азербайджанская İ, а в оригинале была английская i. Кто и для кого подготовил эту пакость неизвестно, но эффект от нее может быть неожиданным. Будем надеяться, что это bug, not a feature.

Как это все решается:
System.out.println("decimal".toUpperCase(Locale.US));

Или более глобально в начале программы в коде явно задайте default Locale, если это приемлемо.