我的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
似乎排除Jetty是问题所在。我认为TagSoup可能(甚至可能)不像我期望的那样表现。
我目前正在Enlive邮件列表上阅读此帖子:mdash output as question mark。
更新:我的Clojure模板(我使用的是Enlive,但我刚刚切换到Laser - 但两者在这方面的行为相同)将HTML实体转换为Unicode。问题似乎是我的安装Jetty 9没有配置(或者我没有给它它需要的东西)来处理Unicode字符。
答案 0 :(得分:0)
启动Jetty时指定UTF-8编码解决了问题。
java -Dfile.encoding=UTF-8 -jar start.jar
此外,这是我使用的厨师食谱,以防它帮助您:https://github.com/bluemont/chef-jetty