2012-04-26 3 views
15

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

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

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

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

+0

«некоторый текст ASCII»: вы действительно имеете в виду текст ASCII. Или вы имеете в виду «какой-то текст»? – Raedwald

+0

Я имел в виду ASCII. Я пытался предположить, что я не использовал никаких символов ASCII. Я уточнил этот вопрос. – mchr

ответ

5

Да, Locale.ENGLISH - это безопасный выбор для операций с футлярами для таких вещей, как идентификаторы языка программирования и URL-адреса, поскольку он не предусматривает каких-либо специальных правил обсадной колонны и всех 7-битных символов ASCII в случае с регистром ENGLISH-convert to 7-bit Символы ASCII.

Это не относится ко всем остальным регионам. На турецком языке символы «I» и «i» не преобразуются в регистр друг к другу.

"Dotted and dotless I" объясняет:

Турецкий алфавит, который представляет собой вариант латинского алфавита, включает в себя две различные версии этого письма я, один пунктирная и другой Dotless.

В Юникоде U + 0131 является строчной буквой без пробелов i (ı). U + 0130 (İ) - это капитал i с точкой. ISO-8859-9 имеет их в положениях 0xFD и 0xDD соответственно. В обычной типографии, когда нижний регистр i сочетается с другими диакритическими знаками, точка обычно удаляется до добавления диакритики; однако Unicode по-прежнему отображает эквивалентные последовательности совмещения, в том числе пунктирные i, так как логически это обычный символ пунктирного i, который изменяется.

Большинство программных шекетов Unicode от I до I и нижних ярусов от I до i, но, если специально не настроено для турецкого языка, оно уменьшает I до 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 

...

+0

«Это неверно для всех других локалей», которые не могут использовать ASCII. – Raedwald

+0

В каких обстоятельствах вы бы использовали языковой стандарт ROOT?Я использовал это, чтобы иметь в виду, что я не хочу применять специальную футляру для случая. – mchr

+0

@ Raedwald, я не уверен, что понимаю. Не могли бы вы рассказать о своем комментарии? –

2

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

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

+0

OP говорит «некоторый текст ASCII». Поскольку ASCII полезен только для текста на английском языке, «как ожидается» должен означать, как ожидалось, на английском языке. – Raedwald