UTF-8 符号无法在使用 Pedestal 的浏览器中正确显示
UTF-8 symbols not displaying properly in browser using Pedestal
我制作了最简单的 Pedestal 项目,运行 它在我本地的 repl 中。然而,在 localhost:8890
检查浏览器后,我看到了 � (替换字符)而不是我放入我的基座路线的实际文本(西里尔符号)。
我还检查了浏览器 devtools 响应 headers:
Content-Type:text/html;存在字符集=utf-8。
在你提问之前:
- 是的,我设置了
charset=UTF-8
作为响应,您可以在下面的代码中看到。
- 我的
core.clj
文件也是 UTF-8 编码。
- 我也尝试过其他浏览器,同样的事情。
- 附加信息:我正在使用 Windows,但以前从未在其他库和框架中遇到过这个问题(ring,yada).可能是 Pedestal 在将代码传递给码头服务器时以某种方式在内部破坏了我的代码吗?我不知道。
项目全部代码:
(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!"))
这是一种奇怪的行为,我不知道我错过了什么,所以任何帮助将不胜感激。谢谢!
我认为问题在于 REPL 如何启动。你有没有得到类似
的东西
Starting nREPL server... "C:\Program
Files\Java\jdk1.8.0_66\jre\bin\java" -Dfile.encoding=Cp1251
-XX:-OmitStackTraceInFastThrow -Dclojure.compile.path=D:\workspace-clojure\the-next-big-server-side-thing\target\classes
-Dthe-next-big-server-side-thing.version=0.0.1-SNAPSHOT -Dclojure.debug=false -Didea.launcher.port=50071 "-Didea.launcher.bin.
REPL 什么时候开始?
如果是这样,您可能需要添加新的 JVM 参数来解决这个问题。
我制作了最简单的 Pedestal 项目,运行 它在我本地的 repl 中。然而,在 localhost:8890
检查浏览器后,我看到了 � (替换字符)而不是我放入我的基座路线的实际文本(西里尔符号)。
我还检查了浏览器 devtools 响应 headers: Content-Type:text/html;存在字符集=utf-8。
在你提问之前:
- 是的,我设置了
charset=UTF-8
作为响应,您可以在下面的代码中看到。 - 我的
core.clj
文件也是 UTF-8 编码。 - 我也尝试过其他浏览器,同样的事情。
- 附加信息:我正在使用 Windows,但以前从未在其他库和框架中遇到过这个问题(ring,yada).可能是 Pedestal 在将代码传递给码头服务器时以某种方式在内部破坏了我的代码吗?我不知道。
项目全部代码:
(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!"))
这是一种奇怪的行为,我不知道我错过了什么,所以任何帮助将不胜感激。谢谢!
我认为问题在于 REPL 如何启动。你有没有得到类似
的东西Starting nREPL server... "C:\Program Files\Java\jdk1.8.0_66\jre\bin\java" -Dfile.encoding=Cp1251 -XX:-OmitStackTraceInFastThrow -Dclojure.compile.path=D:\workspace-clojure\the-next-big-server-side-thing\target\classes -Dthe-next-big-server-side-thing.version=0.0.1-SNAPSHOT -Dclojure.debug=false -Didea.launcher.port=50071 "-Didea.launcher.bin.
REPL 什么时候开始?
如果是这样,您可能需要添加新的 JVM 参数来解决这个问题。