我制作了最简单的Pedestal项目,并在本地执行了我的repl项目。然而,在localhost:8890
检查浏览器后,我看到了 (替换字符),而不是我放入Pedestal路径中的实际文本(西里尔文符号)。使用基座在浏览器中无法正确显示UTF-8符号
我也检查过浏览器devtools响应标头: 内容类型:text/html; charset = utf-8存在。
之前你问:
- 是的,我在响应设置
charset=UTF-8
,你可以在下面的代码看看。 - 我的
core.clj
文件也采用UTF-8编码。 - 我也试过其他浏览器,同样的事情。
- 附加信息:我使用的是Windows,但从未遇到过与其他库和框架(ring,yada)之前的问题。难道基座会以某种方式破坏我的代码,同时将它传递给码头服务器?我不知道。
项目的全部代码:
(ns samplepedestal.core
(:require [io.pedestal.http :as http]
[io.pedestal.http.route :as route])
(:gen-class))
(defn html-response
[req]
{:status 200
:body "<html lang=\"ru\">
<head>
<meta charset=\"utf-8\" />
<title>Текст на русском</title>
</head>
<body>Текст на русском</body>
</html>"
:headers {"Content-Type" "text/html; charset=UTF-8"}})
(def routes
(route/expand-routes
[[["/" {:get `html-response}]]]))
(def service-map
{::http/routes routes
::http/type :jetty
::http/port 8890})
(defn start []
(http/start (http/create-server service-map)))
;; -- Interactive development
(defonce server (atom nil))
(defn start-dev []
(reset! server
(http/start (http/create-server
(assoc service-map
::http/join? false)))))
(defn stop-dev []
(http/stop @server))
(defn restart []
(stop-dev)
(start-dev))
;; ---
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "Hello, World!"))
这是一种奇怪的现象,我不知道我错过了什么,所以任何帮助,将不胜感激。谢谢!
你*确定*您CLJ文件是UTF-8编码?尝试写''u0421'而不是'с'(或其他类似的替代品)。如果服务器正在发送正确的头文件,那么您很可能从磁盘读取了错误的字符。或者,您的浏览器正在使用的字体可能没有这些字符的字形? – amalloy
@amalloy,是的,我对utf-8编码的clj文件很肯定。我试图写'\ u0421'而不是'с' - 没有工作,得到了相同的结果。字体很好,我将相同的html代码粘贴到本地html文件并打开它,它显示正确。 –
我在我的电脑上运行了您的代码,我的浏览器正确显示了西里尔文符号。 –