Ответ 1
Обновление: Java 6 представила Locale.ROOT
, который описывается как:
Это рассматривается как базовая локали всех локалей и используется как нейтральный язык языка/страны для операций, чувствительных к языку.
Это, вероятно, лучше, чем использование США, но я не проверял его на код ниже.
Нет, это в основном правильный путь. Хотя существуют различия между культурой США и инвариантной культурой с точки зрения форматирования, я не верю, что они влияют на правила обсадной колонны.
EDIT: На самом деле, программа быстрого тестирования показывает, что в культуре инвариантов по-разному используются символы, отличные от .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 - это Турция, но я не знаю о других...