hauka
1
可能是我没事找事了,我在文件名里使用了中文。平常可以正常地打开写入文件,并且 Windows 自带的文件浏览器也可以正常显示。但是用 M-x diff 的时候就会:
D:/Git/usr/bin/diff.exe -u "d:/LISP-test/elisp/diff-test/文件2.txt" "d:/LISP-test/elisp/diff-test/文件1.txt"
--- "d:/LISP-test/elisp/diff-test/\346\226\207\344\273\2662.txt" 2026-01-03 04:00:24.674581000 +0800
+++ "d:/LISP-test/elisp/diff-test/\346\226\207\344\273\2661.txt" 2026-01-03 04:00:16.195637800 +0800
出现类似这样的数字。这串数字应该可以这样解码:
(decode-coding-string
(encode-coding-string
(string #o346 #o226 #o207 #o344 #o273 #o266)
'iso-8859-1)
'utf-8)
输出的字符串是 “文件”。
有时候会报错 “找不到文件”,然后输出乱码的文件名。但是我不知道是什么原因决定了文件名乱码还是变成数字。
同样问题,所以我diff用的两个txt都用英文命名(old/new.txt),不会出错能正常diff
编辑:测试了下,也可以用下列代码兼容中文名
(when (eq system-type 'windows-nt)
(add-to-list 'process-coding-system-alist
'("[rR][gG]" . (utf-8 . gbk-dos)))
;;ffmpeg的中文名兼容
(add-to-list 'process-coding-system-alist
'("[fF][fF][mM][pP][eE][gG]" . (utf-8 . gbk-dos)))
;;顺便把cwebp也兼容了
(add-to-list 'process-coding-system-alist
'("[cC][wW][eE][bB][pP]" . (utf-8 . gbk-dos)))
;; 还有pandoc
(add-to-list 'process-coding-system-alist
'("[pP][aA][nN][dD][oO][cC]" . (utf-8 . gbk-dos)))
;; diff
(add-to-list 'process-coding-system-alist
'("[dD][iI][fF][fF]" . (utf-8 . gbk-dos))))