【问题标题】:Jetty 9, character encoding UTF-8Jetty 9,字符编码 UTF-8
【发布时间】:2017-07-27 00:12:42
【问题描述】:

我的编码和 Jetty 有问题。

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

到目前为止,我所有的 UTF-8 文件都有 BOM,我没有遇到任何问题。但是现在我使用了不同的文本编辑器,我注意到我的 UTF-8 文件现在生成时没有 BOM,从我阅读的内容来看这是一件好事,所以我决定从现在开始不使用 BOM。

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

到目前为止,我找到了一种解决方法,即使用以下代码启动我的所有 JSP 文件:

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

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

我尝试添加

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

按照其他线程中的建议启动码头时到我的 JAVA_OPTIONS 但它似乎没有做任何事情。

任何帮助将不胜感激。

【问题讨论】:

    标签: encoding utf-8 jetty character


    【解决方案1】:

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

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

    【讨论】:

    • OP 愿意找到一种像宽参数这样的方式来设置编码,但不是通过 JSP。
    • Apache Jasper JSP 引擎在这里完全控制。 Jetty 只是遵循 Apache Jasper JSP 引擎生成的 servlet 行为和原始输出字节,并将这些字节发送到客户端不受干扰。 Jetty 可以对该输出做的唯一事情是应用 Transfer-Encoding (chunked) 或 Content-Encoding (gzip)。
    • 谢谢,它有效,解释有助于理解它为什么有效。有总比没有好。
    【解决方案2】:

    在处理 Jetty 上的 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>
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2011-06-17
      • 2018-07-02
      • 2017-04-27
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多