讨论一下 Emacs 中的 UTF-8 编码设置

@noalias 这样设置应该就可以解决问题。我只测试了默认的 gzip 的情况,7z 的你试试看。

(add-to-list 'process-coding-system-alist '("cmd" . (gbk . gbk)))
(add-to-list 'process-coding-system-alist '("gzip" . (gbk . gbk)))
(add-to-list 'process-coding-system-alist '("7z" . (gbk . gbk)))
1 个赞

好的,感谢🙏

你好 有试过在dired中使用gpg4win吗,我加密英文文件时候正常,加密中文名字的文件就乱码,按照上面的设置

(setq file-name-coding-system 'gbk)

(add-to-list 'process-coding-system-alist '(“cmd” . (gbk . gbk)))

(add-to-list 'process-coding-system-alist '(“gpg” . (gbk . gbk)))

依然还是中文乱码。

我没在 dired 用过 gpg,我用gpg4win主要是用于 git 的签名验证时读取 signingkey。不知道在 dired中你是怎么操作的?能否给一个重现的步骤?

Windows下Emacs使用的shell应该是cmdproxy。 试下这个:

 (set-file-name-coding-system 'gbk)
 (modify-coding-system-alist 'process
                              (rx (or (and (or ?c ?C)
                                           (or ?m ?M)
                                           (or ?d ?D)
                                           (or ?p ?P)
                                           (or ?r ?R)
                                           (or ?o ?O)
                                           (or ?x ?X)
                                           (or ?y ?Y))
                                       "gm" "7z" "es" "fd" "rg"))
                               '(utf-8-auto . chinese-gbk-dos))))

gpg添加到rg后面。

遗憾 还是不行,但是谢谢

如果是已有文件打开是乱码,那就要已此文件生成时的编码格式重新打开,或者转换下Emacs设置的编码格式。

如果是设置为utf8了,打开utf8的文件中文还是乱码,尝试下这么设置:

;; Contrary to what many Emacs users have in their configs, you don't need more
;; than this to make UTF-8 the default coding system:
(defun init-coding-system-h ()
  (set-language-environment "UTF-8")
  ;; (set-locale-environment "en_US.UTF-8")
  ;; ...but `set-language-environment' also sets `default-input-method', which is
  ;; a step too opinionated.
  (setq default-input-method nil)
  ;; ...And the clipboard on Windows could be in a wider encoding (UTF-16), so
  ;; leave Emacs to its own devices.
  (eval-when! IS-WINDOWS
    ;;(setq selection-coding-system 'utf-8)
    (set-clipboard-coding-system 'utf-16-le)
    (set-selection-coding-system 'utf-16-le))
  ;; Treat clipboard input as UTF-8 string first; compound text next, etc.
  (if (display-graphic-p)
      (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))))
(add-hook 'before-init-hook #'init-coding-system-h 'append)

感谢费心写代码,其实是dired中使用epa加密文件时提示中文字符乱码,我觉得是读取文件名称时候哪里出错了,但是用了各种大哥的设置,还是不行

@mezi @aqua0210 两位大哥好,由于我是内网环境,而且不能插u盘,只能拍照片说明了。 新执行的emacs -q,执行的设置就是图一中的,图二是dired界面,按:e会报错,中文文件名会已乱码的形式显示,所以才让gpg抛出了错误,请大哥们看看这怎么办😣

你系统文件名已经是 UTF-8 了

UTF-8 的 “你好” 用 gbk 解码就是 “浣犲ソ”

不知道作用的配置不要乱抄

可是我是用win7的文件管理器新建的文件啊,那该如何设置呢

不用设置就能成功,如果不设置还是不行,把 gbk 改成 utf-8

还是不行,file-name-coding-system改成utf-8也是不行

  1. file-name-coding-system 这个变量在 Windows 上改了没用,文档说了 Emacs 根本不看这个变量的

  2. 后面的 add-to-list 重新启动 emacs 再设置

  3. 默认的设置出什么问题,截图发下

抱歉,内网禁u盘系统,只能拍照片凑合看看了

以上都是关闭emacs进程后,重新打开的emacs -q,其实很单纯的操作,就是在dired里面用epa加密而已。 我在linux环境下从没遇到这种问题,最近是想在单位电脑设置emacs环境,结果发现一堆问题,包括不限于rg之类的中文搜索问题,造成无法快速搜索文本资料的情况,不过这个先不管了。我再试试上面几个朋友的设置。

我一般都这样设置

  (set-default 'process-coding-system-alist
               '(
                 ("[pP][lL][iI][nN][kK]" utf-8-dos . gbk-dos)
                 ("[cC][mM][dD][pP][rR][oO][xX][yY]" utf-8-dos . gbk-dos)
                 )))
  (add-to-list 'process-coding-system-alist '("firefox.exe" utf-8 . gbk))

遗憾 我把firefox.exe改成了gpg.exe,还是不行。难道是gpg4win自身的问题?

你这不还是 gbk 么?完全一样的图

我误会了,我重新开了emacs -q,如下图,其实还是一样的

(add-to-list 'process-coding-system-alist '("firefox.exe" utf-8 . gbk))

这个process-coding-system-alist值要根据你程序自身去判断,绝大部情况编码是 utf-8 . gbk。 我试过有些程序设置成gbk-dos . gbk-dos才行,可以试试。