Windows平台下在Emacs中使用plantuml中文乱码问题(已解决)
Windows平台下在Emacs中使用plantuml中文乱码问题(已解决)#
当我们在Emacs中使用plantuml时,如果使用了中文,则可能会遇到中文乱码问题。
plantuml的配置和教程参见另一篇文章:
http://www.cnblogs.com/yangwen0228/p/6825560.html
假设,我们做一个下面的例子:
#+BEGIN_SRC plantuml :file "http://images2015.cnblogs.com/blog/717724/201705/717724-20170508161213488-1137189911.jpg" title 时序图 == 鉴权阶段 == Alice -> Bob: 请求 Bob -> Alice: 应答 == 数据上传 == Alice -> Bob: 上传数据 note left: 这是显示在左边的备注 Bob --> Canny: 转交数据 ... 不超过 5 秒钟 ... Canny --> Bob: 状态返回 note right: 这是显示在右边的备注 Bob -> Alice: 状态返回 == 状态显示 == Alice -> Alice: 给自己发消息 #+END_SRC
我们可以看到,结果是乱码:
那么,是什么原因导致了乱码呢?
首先,我们的文件编码是utf-8,而plantuml默认使用系统编码,那么应该gb2312编码。所以,会出现乱码。解决方法是,在code block的option中添加 ~:cmdline -charset utf-8~。
这个是导出plantuml的源码:
(defun org-babel-execute:plantuml (body params) "Execute a block of plantuml code with org-babel. This function is called by `org-babel-execute-src-block'." (let* ((result-params (split-string (or (cdr (assoc :results params)) ""))) (out-file (or (cdr (assoc :file params)) (error "PlantUML requires a \":file\" header argument"))) (cmdline (cdr (assoc :cmdline params))) (in-file (org-babel-temp-file "plantuml-")) (java (or (cdr (assoc :java params)) "")) (cmd (if (string= "" org-plantuml-jar-path) (error "`org-plantuml-jar-path' is not set") (concat "java " java " -jar " (shell-quote-argument (expand-file-name org-plantuml-jar-path)) (if (string= (file-name-extension out-file) "svg") " -tsvg" "") (if (string= (file-name-extension out-file) "eps") " -teps" "") " -p " cmdline " < " (org-babel-process-file-name in-file) " > " (org-babel-process-file-name out-file))))) (unless (file-exists-p org-plantuml-jar-path) (error "Could not find plantuml.jar at %s" org-plantuml-jar-path)) (with-temp-file in-file (insert (concat "@startuml\n" body "\n@enduml"))) (message "%s" cmd) (org-babel-eval cmd "") nil))
添加 :cmdline -charset utf-8
:
#+BEGIN_SRC plantuml :file "http://images2015.cnblogs.com/blog/717724/201705/717724-20170508161216691-1631285625.jpg" :cmdline -charset utf-8 title 时序图 == 鉴权阶段 == Alice -> Bob: 请求 Bob -> Alice: 应答 == 数据上传 == Alice -> Bob: 上传数据 note left: 这是显示在左边的备注 Bob --> Canny: 转交数据 ... 不超过 5 秒钟 ... Canny --> Bob: 状态返回 note right: 这是显示在右边的备注 Bob -> Alice: 状态返回 == 状态显示 == Alice -> Alice: 给自己发消息 #+END_SRC
正确的中文编码结果:
标签:
emacs
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端