在 tomcat 中部署战争后,Java 文本规范化的行为有所不同
Posted
技术标签:
【中文标题】在 tomcat 中部署战争后,Java 文本规范化的行为有所不同【英文标题】:Java text normalization behaving differently after deploying the war in tomcat 【发布时间】:2018-08-07 15:37:39 【问题描述】:我正在尝试规范化具有重音字符的字符串。它在我的 intellij IDE 上运行良好,但是当我使用 maven 构建它并在 tomcat 中部署战争时,我得到了这样的意外结果。你能帮忙吗?
要规范化的 Java 代码
String normalizedString = Normalizer.normalize(inputText, Normalizer.Form.NFD).replaceAll("[^\\pASCII]", "");
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>
这存在于我在 tomcat 中的 server.xml 中
<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();
【讨论】:
以上是关于在 tomcat 中部署战争后,Java 文本规范化的行为有所不同的主要内容,如果未能解决你的问题,请参考以下文章
如何读取部署在 Tomcat 中的未爆炸战争文件中的资源文件?
在 osgi 文件夹中复制后,Liferay 7 tomcat 中的战争在哪里爆炸
java.net.socketexception 连接重置由对等套接字写入错误通过 Jenkins 在 Tomcat7 上部署战争时(使用 Maven)