Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String.toUpperCase may strip accents or not

Tags:

java

I have to apply toUpperCase on a name that may contain accents ("é", "à", etc.).
Problem:

  • with JUnit, "é".toUpperCase converts to "E", the accent is removed
  • in my application (a Spring REST API), "é".toUpperCase converts to "É". The input comes from an Ember frontend, but the encoding is the same (UTF-8)

JUnit tests and Spring application use the same characters set (UTF-8) and the locale is French. Both running on Oracle Java 8, on the same machine (Jenkins CI on Debian, but I can reproduce this behavior on my computer: Windows 7).
I tried to specify the locale toUpperCase(Locale.FRANCE), but it doesn't solve my problem.

Are you aware of something that may explain this difference?

like image 740
Jonathan Lermitage Avatar asked Mar 30 '17 08:03

Jonathan Lermitage


1 Answers

As in the conversation with @JonathanLermitage this is not a Java problem but is related to the embedded database (h2) used in the unit tests that is not correctly configured.


I'm using Java 8, no particular configuration.

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

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

Returns

ÀÒÙÌÈÉ
en_US
like image 174
freedev Avatar answered Oct 21 '22 08:10

freedev