String.toUpperCase может лишать акценты или нет
Я должен применить toUpperCase
к имени, которое может содержать акценты ( "é", "à" и т.д.).
Проблема:
- с JUnit,
"é".toUpperCase
преобразуется в "E", акцент удаляется
- в моем приложении (Spring REST API), "é".toUpperCase преобразуется в "É". Вход поступает из интерфейса Ember, но кодировка одинакова (UTF-8)
Тесты JUnit и приложение Spring используют один и тот же набор символов (UTF-8), а язык - французский. Оба работают на Oracle Java 8 на одном компьютере (Jenkins CI на Debian, но я могу воспроизвести это поведение на своем компьютере: Windows 7).
Я попытался указать локаль toUpperCase(Locale.FRANCE)
, но это не решило мою проблему.
Знаете ли вы о чем-то, что может объяснить эту разницу?
Ответы
Ответ 1
Как и в разговоре с @JonathanLermitage, это не проблема Java, но связано со встроенной базой данных (h2), используемой в модульных тестах, которые неправильно настроены.
Я использую Java 8, никакой конкретной конфигурации.
@Test
public void test()
{
String a = "àòùìèé";
String b = a.toUpperCase();
System.out.println(b);
System.out.println(Locale.getDefault());
assertEquals(b,"ÀÒÙÌÈÉ");
}
Возвращает
ÀÒÙÌÈÉ
en_US
Ответ 2
У меня была одна и та же проблема один раз, и для меня это было исправлено, установив локаль по умолчанию:
Locale.setDefault(new Locale("fr_FR"));