Ответ 1
Да, Locale.ENGLISH
- это безопасный выбор для операций с данными для таких вещей, как идентификаторы языка программирования и URL-адреса, поскольку он не предусматривает каких-либо специальных правил обсадной колонны и всех 7-битных символов ASCII в случае с регистром ENGLISH-convert to 7- бит ASCII.
Это неверно для всех других локалей. На турецком языке символы "I" и "i" не преобразуются в регистр друг к другу.
"Пунктирная и бесчисленная я" объясняет:
Турецкий алфавит, который является вариантом латинского алфавита, включает в себя две различные версии буквы I, одну пунктирную, а другую - бесчисленную.
В Unicode U + 0131 является строчной буквой без пробелов я (ı). U + 0130 (İ) - это капитал я с точкой. ISO-8859-9 имеет их в положениях 0xFD и 0xDD соответственно. В обычной типографии, когда нижний регистр я сочетается с другими диакритическими знаками, точка обычно удаляется до добавления диакритики; однако Unicode по-прежнему отображает эквивалентные последовательности совмещения, такие как включение точечного i, поскольку логически это измененный нормальный символ точки.
Большинство юникодовых программных верхних букв ı для я и нижних регистров от İ до i, но, если специально не настроено для турецкого языка, оно уменьшает я до я и верхние регистры я до I. Таким образом, верхний, затем нижний регистр или наоборот, меняет буквы.
Список специальных исключений поддерживается http://unicode.org/Public/UNIDATA/SpecialCasing.txt
# ================================================================================ # Turkish and Azeri # I and i-dotless; I-dot and i are case pairs in Turkish and Azeri # The following rules handle those cases. 0130; 0069; 0130; 0130; tr; # LATIN CAPITAL LETTER I WITH DOT ABOVE 0130; 0069; 0130; 0130; az; # LATIN CAPITAL LETTER I WITH DOT ABOVE # When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i. # This matches the behavior of the canonically equivalent I-dot_above 0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE 0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE
...