Нормализация текста Java ведет себя иначе после развертывания войны в Tomcat

Я пытаюсь нормализовать строку с символами ударения. Он отлично работает на моей intellij IDE, но когда я собираю его с помощью maven и разверну войну в tomcat, я получаю неожиданные результаты, подобные этому. Можете ли вы помочь?

Java-код для нормализации

String normalizedString = Normalizer.normalize(inputText, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");

Вывод из логов tomcat:

Input text = ůňa
Normalized String = AAa

Вывод, когда я запускаю тот же код на моей локальной машине в IDE

Input text = ůňa
Normalized String = una

Нужно ли где-то указывать некоторые настройки кодировки?

У моего мавена есть это:

#<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>

Это присутствует в моем server.xml в Tomcat

  <Connector port="8443" 
  protocol="org.apache.coyote.http11.Http11NioProtocol"
  SSLEnabled="true"
  maxThreads="150"
  scheme="https"
  secure="true"
  clientAuth="false"
  sslProtocol="TLS" 
  URIEncoding="UTF-8"
  />

1 ответ

Я смог решить это. Я читал данные из файла, и при чтении файла кодировка не упоминалась. Как только я поставил это, проблема была исправлена

private static String inputStreamToString(InputStream is) throws IOException {
    StringBuilder sb = new StringBuilder();
    String line;
    BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
    while ((line = br.readLine()) != null) {
        sb.append(line);
    }
    br.close();
    return sb.toString();


}
Другие вопросы по тегам