Нормализация текста 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();
}