Обновление: Java 6 представлена Locale.ROOT
, которая описывается как:
Это рассматривается как базовый языковой стандарт для всех языковых стандартов и используется в качестве нейтрального языкового / странового языкового стандарта для чувствительных к региональным настройкам операций.
Это, вероятно, лучше, чем использование US, но я не проверял его по приведенному ниже коду.
Нет, это в основном правильный путь. В то время как есть различия между культурой США и инвариантной культурой с точки зрения форматирования, я не верю, что они влияют на правила оболочки.
РЕДАКТИРОВАТЬ: На самом деле, программа быстрого тестирования показывает, что это символов, которые в верхнем регистре в .NET в США отличаются от символов в инвариантной культуре:
using System;
using System.Globalization;
class Test
{
static void Main()
{
CultureInfo us = new CultureInfo("en-US");
for (int i = 0; i < 65536; i++)
{
char c = (char) i;
string s = c.ToString();
if (s.ToUpperInvariant() != s.ToUpper(us))
{
Console.WriteLine(i.ToString("x4"));
}
}
}
}
Выход:
00b5
0131
017f
01c5
01c8
01cb
01f2
0345
0390
03b0
03c2
03d0
03d1
03d5
03d6
03f0
03f1
03f5
1e9b
1fbe
У меня нет времени сейчас на это смотреть, но это стоит исследовать. Я не знаю, применимы ли такие же различия в Java - вы, вероятно, захотите взять их пример и выяснить, что вы хотите, чтобы ваш код делал.
РЕДАКТИРОВАТЬ: И чтобы быть полным, стоит упомянуть, что он проверяет только отдельные символы ... тогда как вы на самом деле целые строки в верхнем регистре, которые могут иметь значение.
Рассматривая Java код для прописных букв, который, как представляется, имеет специфичное для локали поведение только для стран tr, az и lt. Я знаю, что tr - это Турция, но я не знаю насчет остальных ...