让JettyRunner使用UTF-8编码提供静态内容(如CSS和JavaScript)

Making JettyRunner serve up static content (like CSS and JavaScript) with UTF-8 encoding

本文关键字:CSS JavaScript 静态 使用 JettyRunner UTF-8 编码      更新时间:2023-09-26

我正在通过Jetty Runner(7.6.15)运行一个Java项目。我最近一直在尝试使用D3.js,为了调试一些神秘的问题,我需要不加修饰地提供它。D3在一些变量名中有一些非拉丁Unicode字符(比如var π = Math.PI)。

当我尝试使用未经优化的文件时,我会遇到错误,因为我的浏览器认为字符编码是ISO-8859-1,而不是UTF-8。果不其然,服务器响应中的"Content-Type"标头没有字符集。

我将在LANGLC_ALL都设置为"en_US.UTF-8"的情况下启动Jetty Runner,并在Java命令行上传递设置为"UTF-8"的系统属性file.encoding。这显然是不够的。我可以查看主机上的源文件,它肯定完好无损;事实上,如果我直接从浏览器地址栏加载JavaScript文件,并手动告诉Firefox它是Unicode,那么它看起来很好。

我不会用配置文件启动JettyRunner,因为我不知道如何做到这一点。它似乎在主HTML页面(它是一个单页应用程序)的内容类型标题中添加了一个明确的ISO-8859-1标记,当然这会覆盖文档标题中的<meta charset>标记。

那么有办法做到这一点吗?有时我觉得我是地球上仅有的12个使用Jetty Runner的人之一:)

这就像我的web.xml:中的一个子句一样简单

  <mime-mapping>
    <extension>js</extension>
    <mime-type>application/javascript; charset=UTF-8</mime-type>
  </mime-mapping>

我不知道我怎么会注意到这么明显的事情。它甚至与Jetty本身没有太大关系。