Какой язык я должен указать при вызове String toLowerCase

В Java метод String toLowerCase использует систему Locale по умолчанию, чтобы определить, как обращаться с нижним индексом. Если я уменьшаю текст ASCII и хочу быть уверенным, что это будет обработано, как ожидалось, какой язык я должен использовать?

EDIT: меня главным образом интересует программирование идентификаторов, таких как имена таблиц и столбцов в схеме. Поэтому я хочу, чтобы английский нижний корпус применялся.

Locale.ROOT заявляет, что это языковой нейтральный язык языка/страны для операций, чувствительных к языку.

Locale.ENGLISH предположительно также будет безопасным выбором.

Ответы

Ответ 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

...

Ответ 2

Если я уменьшаю некоторый текст ASCII и хочу быть уверенным, что это обрабатывается, как ожидалось, какой язык я должен использовать?

Это зависит от того, что "как ожидалось" означает для вас. Точка, позволяющая указывать Locale, заключается в том, что верхний регистр/нижний регистр не работает одинаково на всех языках, хотя они могут использовать одни и те же буквы. Поэтому укажите Locale, в которой вы и/или ваши клиенты живете, и это, вероятно, будет работать так, как вы/они ожидают.