gpt4 book ai didi

java - Tomcat 字符编码在服务器和本地开发之间的工作方式不同

转载 作者:行者123 更新时间:2023-11-28 22:54:27 26 4
gpt4 key购买 nike

我遇到一个问题,字符编码在我的开发环境(NetBeans 和本地 Tomcat 安装)和我们的服务器中工作方式不同。我们将 Tomcat 用于服务器端 servlet 和 Java 客户端。

在服务器端,这段代码在我的机器上本地运行:

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
...
java.util.zip.InflaterInputStream zipIn = new java.util.zip.InflaterInputStream(request.getInputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(zipIn, "UTF-8"));
String line = in.readLine(); // correctly encoded String
...
}

然而,在实际的服务器上,指定字符集会破坏代码,并且只会这样工作:

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
...
java.util.zip.InflaterInputStream zipIn = new java.util.zip.InflaterInputStream(request.getInputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(zipIn));
String line = in.readLine(); // correctly encoded String
...
}

我尝试过不同版本的 Tomcat(7 和 8)和不同版本的 Java(7 和 8),我还尝试在 Tomcat 连接器 (URIEncoding) 中指定字符集,甚至作为 JVM 参数,但这些似乎都没有什么不同。

当上面的代码执行时,我检查了默认字符集,它是 windows-1252,这就是我在 InputStreamReader 构造函数中指定 UTF-8 的原因,不知道这在我们的服务器上是如何工作的。 request.getCharacterEncoding() 也返回 utf-8。

有人有什么想法吗?在此先感谢您的帮助。

最佳答案

看起来我需要用“-Dfile.encoding=UTF-8”启动 JVM,这就成功了。我认为实际的 String 对象仍然被编码为 Windows 默认值,所以一旦从流中读取,编码就搞砸了。字符串仍然可以很好地打印到控制台,但是当我检查 Unicode 点时,出现了错误的字符。

关于java - Tomcat 字符编码在服务器和本地开发之间的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31251437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com