1

我的 HTML 实体,例如©mdash;显示为 ?,无论是在页面上呈现时还是在我查看底层源代码时 - 但仅在通过我的生产 Jetty 服务器(在webapps目录中)提供服务时。

当通过本地 Nginx 从静态文件提供 HTML 实体时,它们看起来很好。在使用嵌入式 Jetty 开发 Pedestal 应用程序时,它们看起来也不错。这是 HTML 头:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta content="IE=edge" http-equiv="X-UA-Compatible" />
  <meta content="width=device-width, initial-scale=1.0" name="viewport" />
  <meta content="Web Site Description" name="description" />
  <meta content="The Author" name="author" />
  <link href="/images/favicon-128x128.png" type="image/png" rel="shortcut icon" />
  <title>A Really Great Title</title>
  <link rel="stylesheet" href="/css/bootstrap.css" />
  <link rel="stylesheet" href="/css/shared.css" />
  <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js">
    </script>
    <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js">
    </script>
  <![endif]-->
</head>

我该如何解决这个问题?可能出了什么问题?或者,如果失败了,我该如何调试?

一些想法:

首先,我在生产中使用 Jetty 9.1.X。我的开发服务器使用(来自lein deps :tree):

[io.pedestal/pedestal.jetty "0.2.2"]
   [javax.servlet/javax.servlet-api "3.0.1"]
   [org.eclipse.jetty/jetty-server "8.1.9.v20130131"]
     [org.eclipse.jetty.orbit/javax.servlet "3.0.0.v201112011016"]
     [org.eclipse.jetty/jetty-continuation "8.1.9.v20130131"]
     [org.eclipse.jetty/jetty-http "8.1.9.v20130131"]
       [org.eclipse.jetty/jetty-io "8.1.9.v20130131"]
         [org.eclipse.jetty/jetty-util "8.1.9.v20130131"]
   [org.eclipse.jetty/jetty-servlet "8.1.9.v20130131"]
     [org.eclipse.jetty/jetty-security "8.1.9.v20130131"]

我应该仔细检查 Jetty 9 生产设置吗?

其次,我正在使用Enlive。它依赖于以下依赖项(来自lein deps :tree):

[enlive "1.1.5"]
   [org.ccil.cowan.tagsoup/tagsoup "1.2.1"]
   [org.jsoup/jsoup "1.7.2"]

我想知道TagSoup在生产与开发中的行为是否有所不同。

更新

以下是响应标头:

HTTP/1.1 200 OK
Set-Cookie: ring-session=eyTI ... <SNIP> ... s%3D;Path=/
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Server: Jetty(9.1.3.v20140225)

text/html;charset=UTF-8似乎排除了码头是问题所在。我认为 TagSoup 的行为有可能(甚至很可能)不像我预期的那样。

我目前正在 Enlive 邮件列表中阅读此主题:mdash output as question mark

更新:我的 Clojure 模板(我使用的是 Enlive,但我刚刚切换到 Laser——但这方面两者的行为相同)将 HTML 实体转换为 Unicode。问题似乎是我的安装 Jetty 9 没有配置(或者我没有给它它需要的东西)来处理 Unicode 字符。

4

1 回答 1

0

启动 Jetty 时指定 UTF-8 编码解决了这个问题。

java -Dfile.encoding=UTF-8 -jar start.jar

此外,这是我使用的厨师食谱,以防它帮助你:https ://github.com/bluemont/chef-jetty

于 2014-03-31T18:48:21.427 回答