Jetty字符编码问题

时间:2010-11-18 11:11:37

标签: character-encoding jetty

我遇到了码头字符编码的问题。在Mac(OSX)上安装jetty服务器时,它工作正常。但是,当它安装在Ubuntu(10.10)上时,字符编码不正确。

有问题的页面(不是网址)中的字词是:纽约时报®畅销书

在Linux服务器所服务的页面上显示为“纽约时报畅销书”

在Mac上的服务器提供的页面上显示为“纽约时报®畅销书”(这是正确的)

jetty服务器版本为:hightide-7.0.2.v20100331

所服务文件的字符编码为:UTF-8

如果需要更改任何设置以解决此问题,是否可以告诉我?

提前致谢!

4 个答案:

答案 0 :(得分:5)

我遇到了与jetty 8类似的问题并通过将此行添加到bin / jetty.sh来解决它:

JAVA_OPTIONS+=("-Dfile.encoding=UTF-8")

答案 1 :(得分:3)

得到了;对我来说,它缺少JSP的编码头:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

答案 2 :(得分:3)

我也有这样的问题,我想感谢aditsu的回答。

我在ubuntu 12.04(和14.04)上的Jetty服务器上使用restlet。 restlet应用程序位于Apache服务器后面,作为proxyPass。

所有文件均为UTF-8 所有HTTP响应都有Content-Type text / html;字符集= UTF-8。
所有文件都包含&lt; meta content =“text / html; charset = UTF-8”http-equiv =“content-type”/&gt;

奇怪的是,当服务器启动并且我访问该站点时,字符编码不是UTF-8所以我得到了所有这些有趣的角色。即使所有信号都在告诉服务器和代理以及介于两者之间的所有信息,使用UTF-8进行编码。

当我在服务器启动后手动重启服务时,所有字符都没问题。因为我无法轻易找到答案,而且我不知道是谁造成了这种错误的编码,所以我一直手动重启服务。

我当时的候选人是:Apache,Ubuntu服务启动顺序,Restlet框架,实际使用的文件编码,HTTP标头,HTML元标记。但所有这些都应该如此。

所以最后它是Jetty,我刚刚在几次重新审视这个问题后才考虑过。

我仍然不知道为什么在启动时启动会使字符编码全部错误,并且在手动重启服务之后编码是正确的。添加额外的JAVA参数'-Dfile.encoding = UTF-8'使它全部消失。感谢aditsu再次分享他的解决方案!!

干杯

编辑: 在启动脚本中设置LANG环境变量也可以解决问题。即

export LANG = en_US.UTF-8

实际上,这是在启动时启动Jetty服务器(LANG未定义开箱)和从shell启动它之间的区别。因此,针对同一问题的两种解决方案。

答案 3 :(得分:0)

您可能正在直接阅读原始http编码,您需要使用解码器将其解码为utf8。

使用java.net.URLDecoder line = URLDecoder.decode(line,“UTF-8”);

要将文本编码为html charset,请使用URLEncoder,就像直接发布java String时一样: line = URLEncoder.encode(line,“UTF-8”);