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

  • 相关阅读:
    codechef T4 IPC Trainers
    超低延迟直播系统WebRTC编译Android报错UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe6 in position
    网络穿透/视频组网平台EasyNTS上云网关进行视频拉转推报错failed-init Connect failed: I/O error
    WebRTC网页远程视频会议系统EasyRTC 在新版谷歌浏览器 87 及部分版本黑屏问题的优化
    【解决方案】基于RTSP/RTMP/GB28181协议视频平台EasyCVR搭建的金融系统担保监控平台的设计与实现
    视频综合管理平台EasyNVS是如何接入EasyNVR监控系统实现视频通道的统一管理?
    【解决方案】TSINGSEE青犀视频安防可视化解决方案搭建“产业大脑”,打造服务型智慧政府
    【解决方案】TSINGSEE青犀视频EasyCVR智能监控平台完善生鲜门店智能监控分析体系
    web/IOS/android视频智能分析平台EasyCVR接入视频对通道分组后通道仍显示为空如何修复?
    【解决方案】如何通过视频智能分析平台EasyCVR人脸识别功能实现国家电网可视化智能安防监控?
  • 原文地址:https://www.cnblogs.com/yangwen0228/p/6825554.html
Copyright © 2011-2022 走看看