Подтвердить что ты не робот

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), но это не решило мою проблему.

Знаете ли вы о чем-то, что может объяснить эту разницу?

4b9b3361

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