String.toUpperCase可能会删除重音符号

时间:2017-03-30 08:31:54

标签: java

我必须在可能包含重音符号(“é”,“à”等)的名称上应用toUpperCase
问题:

  • 使用JUnit,"é".toUpperCase转换为“E”,重音已删除
  • 在我的应用程序(Spring REST API)中,“é”.toUpperCase转换为“É”。输入来自Ember前端,但编码相同(UTF-8)

JUnit测试和Spring应用程序使用相同的字符集(UTF-8),语言环境是法语。两者都在同一台机器上运行Oracle Java 8(Debian上的Jenkins CI,但我可以在我的计算机上重现这种行为:Windows 7)。
我尝试指定区域设置toUpperCase(Locale.FRANCE),但它无法解决我的问题。

您是否知道可以解释这种差异的事情?

2 个答案:

答案 0 :(得分:2)

与@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

答案 1 :(得分:1)

我遇到了同样的问题,通过设置默认的Locale来解决这个问题:

Locale.setDefault(new Locale("fr_FR"));