Encoding UTF-8符号未在使用底座的浏览器中正确显示
我已经做了一个最简单的基座项目,并在我的repl本地运行它。然而,在检查了Encoding UTF-8符号未在使用底座的浏览器中正确显示,encoding,utf-8,clojure,jetty,pedestal,Encoding,Utf 8,Clojure,Jetty,Pedestal,我已经做了一个最简单的基座项目,并在我的repl本地运行它。然而,在检查了localhost:8890的浏览器后,我看到� (替换字符)而不是实际的文本(西里尔字母符号),我把我的底座路线 我还签入了浏览器devtools响应标题: 内容类型:text/html;存在字符集=utf-8 在你提问之前: 是的,我设置了charset=UTF-8作为响应,正如您在下面的代码中看到的 我的core.clj文件也采用UTF-8编码 我也尝试过其他浏览器,同样的事情 附加信息:我正在使用Windows,但
localhost:8890的浏览器后,我看到� (替换字符)而不是实际的文本(西里尔字母符号),我把我的底座路线
我还签入了浏览器devtools响应标题:
内容类型:text/html;存在字符集=utf-8
在你提问之前:
是的,我设置了charset=UTF-8
作为响应,正如您在下面的代码中看到的
我的core.clj
文件也采用UTF-8编码
我也尝试过其他浏览器,同样的事情
附加信息:我正在使用Windows,但在其他库和框架(ring、yada)中从未遇到过这个问题。是否可能是基座在将代码传递给jetty服务器时以某种方式在内部破坏了我的代码?我不知道
整个项目代码:
(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!"))
(ns sampledesidel.core
(:require[io.dames.http:as-http]
[io.DELATE.http.route:作为路由])
(:gen类)
(defn)html响应
[请求]
{:现状200
:正文“
Текст на русском
Текст на русском
"
:标题{“内容类型”text/html;字符集=UTF-8“})
(def路线
(路线/扩展路线)
[[“/”{:get`html response}]]])
(def服务地图
{::http/routes路由
::http/type:jetty
::http/port 8890})
(定义开始[]
(http/start(http/createserver服务映射)))
;; -- 交互开发
(defonce服务器(atom nil))
(defn启动dev[]
(重置!服务器
(http/start(http/create服务器
(助理服务地图)
::http/join?false(()()))
(定义停止开发[]
(http/stop@server))
(defn重新启动[]
(停止开发)
(启动开发)
;; ---
(defn-main)
“我还没有做很多……还没有。”
[&args]
(打印“你好,世界!”)
这是一种奇怪的行为,我不知道我遗漏了什么,所以任何帮助都将不胜感激。谢谢 我认为问题在于REPL如何启动。你有类似的东西吗
正在启动nREPL服务器。。。“C:\程序
Files\Java\jdk1.8.0\u 66\jre\bin\Java“-Dfile.encoding=Cp1251
-XX:-OmitStackTraceInFastThrow-Dclojure.compile.path=D:\workspace clojure\next big server-side thing\target\classes
-数据下一个大的服务器端事件。版本=0.0.1-SNAPSHOT-Dclojure.debug=false-Didea.launcher.port=50071“-Didea.launcher.bin
REPL什么时候开始
如果是这样,您可能需要添加新的JVM参数来解决这个问题
您确定您的clj文件是utf-8编码的吗?请尝试编写\u0421
而不是c
(或其他类似替换)。如果服务器发送了正确的标题,则很可能是您从磁盘读取了错误的字符。或者,您的浏览器使用的字体没有这些字符的字形?@amalloy,是的,我对utf-8编码的clj文件持肯定态度。我尝试编写\u0421
而不是С
-不起作用,得到了相同的结果结果。字体很好,我将相同的html代码粘贴到本地html文件中并打开,显示正确。我在我的电脑上运行了你的代码,我的浏览器正确显示了西里尔字母符号。@AlbertP,好吧,我为你感到高兴,但问题仍然存在。有什么想法吗?我为我的clojure项目使用不同的编辑器-Atom和proto-repl包。我art repl要么直接在cmd中,要么在proto repl中,所以我没有看到您提到的任何行。有没有其他方法来检查或编辑我的JVM参数,而不是像您在图片中所显示的那样在IntelliJ中?是的,问题在于我的-Dfile.encoding属性。不知道,这个属性之前的设置是什么,我是如何管理的在没有它的情况下可以完美地在其他Clojure项目上工作,但我想这就是你在没有先处理Java的情况下跳入Clojure时得到的结果。谢谢你的正确答案,@akond!