2017-03-06 43 views
0

我遇到了编码和码头问题。码头9,字符编码UTF-8

我的所有文件都以UTF-8编码,并包含正确的HTML元标记以指定UTF-8。

到现在为止,我的所有UTF-8文件都有BOM,而且我没有问题。但是现在我正在使用不同的文本编辑器,并且我注意到现在生成的我的UTF-8文件没有BOM,从我阅读的内容来看,这是一件好事,因此我决定从现在开始不使用BOM。

但问题是,如果Jetty没有BOM,它似乎将所有JSP文件转换为ISO8859-1,然后再将它们发送到浏览器。它会导致问题,因为由于它们具有用于UTF-8的元标记,所以浏览器将文件解释为UTF-8,并且重音符号和其他特殊字符不起作用。

我找到了一个解决办法,到目前为止这是开始用我所有的JSP文件:

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

这工作,但它是kindof烦人,因为我必须在每个文件的开头添加了这一点,我宁愿有一些服务器范围的参数来避免这种情况,如果可能的话,但因为我花了几个小时浏览网络寻求解决方案,我开始认为没有。

我试图

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

码头开始时如在其他线程建议添加到我的JAVA_OPTIONS,但它似乎并没有做任何事情。

任何帮助将不胜感激。

回答

2

看起来你只是缺少pageEncoding属性。

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

OP愿意找到一个像宽参数的方式来设置编码,而不是通过JSP。 – mob41

+0

Apache Jasper JSP引擎完全控制在这里。 Jetty遵循Apache Jasper JSP引擎生成的Servlet行为和原始输出字节,并将这些字节发送到客户端。 Jetty唯一能做的就是应用'Transfer-Encoding'(分块)或'Content-Encoding'(gzip)。 –

+0

谢谢你,它的工作原理和解释有助于理解它的工作原理。这比没有好。 – gouessej

0

,在处理上码头UTF-8编码的文件的情况下工作对我的另一种选择是改变webdefault.xml内容支持UTF-8编码,而不是默认的ISO-8859-1。

您可以找到{{JETTY_HOME}}的/ etc/webdefault.xml

<locale-encoding-mapping> 
    <locale>en</locale> 
    <encoding>UTF-8</encoding> 
</locale-encoding-mapping> 

希望这有助于此文件。