Windows平台下在Emacs中使用plantuml中文乱码问题(已解决)

*/-->

code {color: #FF0000}
pre.src {background-color: #002b36; color: #839496;}

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

正确的中文编码结果:

Date: 2017-05-08 15:58

Created: 2017-05-08 周一 16:12

Emacs 26.0.50 (Org mode 8.2.10)

Validate

Windows平台下在Emacs中使用plantuml中文乱码问题(已解决)的更多相关文章

  1. Windows平台下Qt QOpenGL中glutSolidSphere()方法未定义的解决方法

    Windows平台下Qt中glut库的使用     用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是 ...

  2. Linux系统中关于Sqlite3中文乱码问题及解决办法

    新做的一个项目在本地(Win8)测试时没有问题,但传到服务器(Linux)时从Sqlite3数据库查询到的数据中文却是乱码(数据库中是正常的) 将php文件.html文件都设置成统一的utf8还是一样 ...

  3. Windows 平台下Myeclipse 10 中SVN 插件使用教程(TortoiseSVN)

    1.  TortoiseSVN 简介 版本控制是管理信息修改的艺术,它一直是程序员最重要的工具,程序员经常会花时间作出小的修改,然后又在某一天取消了这些修改,想象一下一个开发者并行工作的团队 - 或许 ...

  4. Windows平台下Python2.7中pip的安装方法

    本文允许转载,转载请保留全文! [请先阅读][说明&总目录]http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 文件下载 需要下载并运行ez_se ...

  5. Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决)

    今天重装系统,安装了新的Myeclipse后,导入之前的项目后,,出现了乱码问题.乱码问题主要是java类中的注释,而jsp页面中汉字却完好如初: 右键项目,查看项目的编码格式,UTF-8,把java ...

  6. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  7. 【VS开发】Windows平台下Makefile学习笔记

    作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开 ...

  8. Windows平台下Oracle实例启动过程中日志输出

    Windows平台下Oracle实例启动过程中日志输出记录. 路径:D:\app\Administrator\diag\rdbms\orcl\orcl\trace\alert_orcl.log 输出内 ...

  9. Windows平台下Oracle监听服务启动过程中日志输出

    Windows平台下Oracle监听服务启动过程中日志输出记录. 日志目录:D:\app\Administrator\diag\tnslsnr\WIN-RU03CB21QGA\listener\tra ...

随机推荐

  1. 67.Task Scheduler(任务规划)

    Level: Medium 题目描述: Given a char array representing tasks CPU need to do. It contains capital letter ...

  2. Page.IsPostBack

    ASP.NET页面的执行顺序说明:Page_Init(页面初始化引发的事件)——Page_Load(加载页面时引发的事件)——ControlEvent(服务器控件引发的事件)——Page_UnLoad ...

  3. Windows程序设计(七)--鼠标

    7.2 客户区鼠标消息 当鼠标移过窗口的显示区域时,窗口消息处理程序收到WM_MOUSEMOVE消息.当在窗口的显示区域中按下或者释放一个鼠标按键时,窗口消息处理程序会接收到下面这些消息: 键 按下 ...

  4. Iplimage versus Mat

    我们可能经常面临这样的困惑,Iplimage和Mat这两种数据结构,我们应该用哪一种数据结构. Iplimage一开始就存在opencv库之中,他来源于Intel的另外一个函数库Intel Image ...

  5. Linux学习笔记5(2)-CentOS7中Tomcat8修改jvm内存配置

    1.进入tomcat的bin目录,比如我的在 /usr/local/apache-tomcat-8.5.16/bin 2.创建新的文件setenv.sh vi setenv.sh 并在此文件中添加以下 ...

  6. kali Linux 入门(一)

    一.描述 1.基于Debian Linux 发行版 2013年3月13日 2.包含约600个安全工具 3.定制 安全稳定的内核 4.前身是BackTrack(2013年停止维护) 5.官方机构:Off ...

  7. Python错误提示:[Errno 24] Too many open files的分析与解决

    背景 最近在工作中发现了一个错误,在执行多线程扫描脚本的时候频繁出现下面这个错误 HTTPConnectionPool(host=‘t.tips', port=80): Max retries exc ...

  8. java 反转数组

    package java03; public class Demo05ArrayReversr { public static void main(String[] args) { int[] arr ...

  9. Exception和Error区别

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11393728.html Exception和Error都是继承了Throwable类,在Java中只有 ...

  10. FMX Android ZIP解压中文乱码

    在手机上解压了一个WINDOWS上的压缩文件, 发现中文是乱码的,解决方法如下: 找到System.zip.pas文件 将E := TEncoding.GetEncoding(437);   改为 E ...