我製作了最簡單的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文件並打開它,它顯示正確。 –
我在我的電腦上運行了您的代碼,我的瀏覽器正確顯示了西里爾文符號。 –