Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java String.toUpperCase是否可以去除重音符号_Java - Fatal编程技术网

Java String.toUpperCase是否可以去除重音符号

Java String.toUpperCase是否可以去除重音符号,java,Java,我必须对可能包含重音符号(“é”、“a”等)的名称应用toUpperCase。 问题: 对于JUnit,“é”。toUpperCase转换为“E”,重音被删除 在我的应用程序(一个SpringRESTAPI)中,“é”.toUpperCase转换为“É”。输入来自余烬前端,但编码相同(UTF-8) JUnit测试和Spring应用程序使用相同的字符集(UTF-8),语言环境是法语。两者都运行在同一台机器上的Oracle Java 8上(Debian上的Jenkins CI,但我可以在我的计算

我必须对可能包含重音符号(“é”、“a”等)的名称应用
toUpperCase

问题:

  • 对于JUnit,
    “é”。toUpperCase
    转换为“E”,重音被删除
  • 在我的应用程序(一个SpringRESTAPI)中,“é”.toUpperCase转换为“É”。输入来自余烬前端,但编码相同(UTF-8)
JUnit测试和Spring应用程序使用相同的字符集(UTF-8),语言环境是法语。两者都运行在同一台机器上的Oracle Java 8上(Debian上的Jenkins CI,但我可以在我的计算机上重现这种行为:Windows 7)。
我试图指定locale
toUpperCase(locale.FRANCE)
,但它没有解决我的问题


您是否知道有什么可以解释这种差异?

我曾经遇到过同样的问题,通过设置默认区域设置,我解决了这个问题:

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

在与@JonathanLermitage的对话中,这不是Java问题,而是与单元测试中使用的未正确配置的嵌入式数据库(h2)有关


我使用的是Java8,没有特别的配置

  @Test
  public void test()
  {
    String a = "àòùìèé";
    String b = a.toUpperCase();
    System.out.println(b);

    System.out.println(Locale.getDefault());
    assertEquals(b,"ÀÒÙÌÈÉ");
  }
返回

ÀÒÙÌÈÉ
en_US

正如@freedev所提到的,我对带重音的字符串的大写字母也没有问题。我也尝试过toUpperCase(Locale.FRANCE),但仍然没有问题。您是否使用JUnit 4?您是否尝试打印默认区域设置?@Paolo Forgia我使用TestNG,但我可以使用JUnit 4进行复制。@freedev我的默认区域设置是“fr_fr”。我试图插入Locale.setDefault(新语言环境(“fr_fr”);但它对我不起作用。不幸的是,它对我不起作用。我只是简单地插入了Locale.setDefault(新语言环境(“fr_fr”);在toUppercase调用之前。我应该在其他地方使用它吗?(对不起,我是Stackoverflow新手,粘贴此输出时遇到一些问题)我的编辑被拒绝,因为某些代码没有格式化。同时,我想我已经理解了这个问题:实际上,我的字符串(正确!)被转换成大写,持久化为PostgreSQL(通过Spring数据),然后读到:我的PostgreSQL似乎需要一些配置,因为它在大写字母上去掉了重音。对不起,当我说单元测试用例没有正确的大写字母时,我错了,错误在我的应用程序代码上。哦,我很抱歉:这不是PostgreSQL,而是我的嵌入式数据库(h2),配置不正确。它解释了为什么生产应用程序(使用PostgreSQL)运行良好,但我的单元测试有缺陷。