zoukankan      html  css  js  c++  java
  • Windows平台下在Emacs中使用plantuml中文乱码问题(已解决)

    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
    

    我们可以看到,结果是乱码:

    http://images2015.cnblogs.com/blog/717724/201705/717724-20170508161215691-1089193198.jpg

    那么,是什么原因导致了乱码呢?
    首先,我们的文件编码是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
    " body "
    @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
    

    正确的中文编码结果:

    http://images2015.cnblogs.com/blog/717724/201705/717724-20170508161218035-803738026.jpg

    Date: 2017-05-08 15:58

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

    Emacs 26.0.50 (Org mode 8.2.10)

    Validate

  • 相关阅读:
    POJ 1306.Combinations
    HDU 5640.King's Cake
    HDU 1072.Nightmare
    HDU 2717.Catch That Cow
    HDU 1372.Knight Moves
    HDU 1548.A strange lift
    AOJ 802.运输宝物
    AOJ 794.西瓜理发记(二)
    AOJ 793.西瓜理发记(一)
    AOJ 789.买酒
  • 原文地址:https://www.cnblogs.com/yangwen0228/p/6825554.html
Copyright © 2011-2022 走看看