一个非常棘手的问题,emacsclient 打开路径中包含中文会乱码 (Windows 下)

正常 find-file 路径可以正常显示,只有用 emacsclient 打开文件的路径中包含中文会乱码。

image

因为乱码导致文件找不到,所以按照创建新文件打开一个空的 buffer

find-file 时路径中的中文可以正常显示:

image

Windows 下用 emacs 就是坑多啊

2 个赞

试试这个?

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

如果不行试试以下命令的排列组合:

(setq file-name-coding-system 'mule-utf-8-dos)
(set-language-environment "UTF-8")
(prefer-coding-system 'utf-8) ; Default setting
1 个赞

Windows 下是怎么通过 emacsclinet 打开文件?命令行?双击?

如果是命令行,是否需要提前设置 locale?

emacsclinet 跟常规启动有区别,编码相关的配置可能要放到 after-make-frame-functions 才能生效,不知道是不是这个原因。

另外就是可以考虑做一个包装,把双击打开关联到自定义的程序/脚本,在程序/脚本中对中文路径进行编码,然后传给 emacsclient.exe。

1 个赞

这些都不行,如果是这些变量的问题,应该 server 端也显示不了中文路径的

wrapper 应该可行,不过不知道 cmd 脚本应该怎样写,再无耻地做一次伸手党 :smile:

在传递给 emacsclient 之前把路径转为 utf-8 编码

批处理脚本大概是这样写的(语法不保证正确。msys 下应该有 iconv.exe?):

rem File: emacsclient.bat
rem Usage: emacsclient.bat /path/to/file
echo %1|iconv.exe -f gb18030 -t utf-8|set /p filepath=
emacsclient.exe %filepath%

或者使用 python 之类更加灵活语言。

1 个赞

不清楚具体的情况,我这里(Emacs 26.0.91)默认就可以正常打开并显示中文文件(名)。

runemacs -Q --daemon

那奇怪了,我先试试 wrapper,你一般是怎么打开文件的?双击?右键?

我常年用 emacsclientw.exe 开文件,遇到乱码就试着设置那几个变量,其他都没有动过。

右键菜单是这么写的

\path\to\emacsclientw.exe -na "runemacs.exe" -c -n "%1"
1 个赞

好的,我再试试

不太懂啊,为什么 emacsclientw 后面又跟一个 runemacs?

请问这个问题解决了吗?我现在也遇到了同样的问题。之前按照网上的说法解决过,现在不知怎么又不行了,原来的方法也忘了

不知道这样可不可行,user-configure下添加 (setq-default pathname coding system 'gbk) (setq file- name-coding- system ’gbk) 反正我电脑上是解决了这一问题

添加 runemacs,是为了当emacs服务端(server)不存在时,会自动建立一个新的server。

我的设置是这样的,可以参考一下,目前在我的win7电脑上用emacsclient打开文件不会出现这个问题:

(when (eq system-type 'windows-nt)
  (setq locale-coding-system 'gb18030)  ;此句保证中文字体设置有效
  (setq w32-unicode-filenames 'nil)       ; 确保file-name-coding-system变量的设置不会无效
  (setq file-name-coding-system 'gb18030) ; 设置文件名的编码为gb18030
  )
4 个赞

解决。紫薯补丁

1 个赞