我遇到了码头字符编码的问题。在Mac(OSX)上安装jetty服务器时,它工作正常。但是,当它安装在Ubuntu(10.10)上时,字符编码不正确。
有问题的页面(不是网址)中的字词是:纽约时报®畅销书
在Linux服务器所服务的页面上显示为“纽约时报畅销书”
在Mac上的服务器提供的页面上显示为“纽约时报®畅销书”(这是正确的)
jetty服务器版本为:hightide-7.0.2.v20100331
所服务文件的字符编码为:UTF-8
如果需要更改任何设置以解决此问题,是否可以告诉我?
提前致谢!
答案 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”);