windows 下编码问题造成 counsel-locate 无法搜索中文

在 windows 下用 Everything 配合 counsel-locate 非常爽: Windows 下 emacs,everything 以及 ivy - #4,来自 et2010

但是问题也有,最主要的问题是无法搜索中文

在 cmd 中可以搜索:

image

但是在 emacs 中不可以:

image

怀疑又是编码问题造成的,emacs 中的编码都是 utf-8,然后Windows默认编码是 GBK,所以当然搜不出来结果。 我的默认编码又不想改成 gbk,有什么办法呢?

感觉 windows 下面 80% 的问题都是编码造成的,真是无比蛋疼

1 个赞

(setq process-coding-system-alist (cons '(“es” . (gbk .gbk)) process-coding-system-alist));;对es 的输入输入的编辑使用gbk

2 个赞

赞,但是这种方法在我这不工作。

counsel--async-command 用到了 start-file-process-shell-command,要用 shell-file-name 才能匹配到,但可能会影响到其它的命令。

设置 default-process-coding-system 有效果,但也可能会影响到其它命令。

也许有更好的方法,可以试试 advice :around 函数 counsel-locate-function,外层套个 let 设置 default-process-coding-system

2 个赞

最近折腾counsel-locate,解决了这个问题

Solution: 覆写counsel-locate-es-cmd,在format最外面套上encode-coding-system把搜索命令编码成gbk

是这样么?

  (defun counsel-locate-cmd-es (input)
    "Return a shell command based on INPUT."
    (counsel-require-program "es.exe")
    (encode-coding-string (format "es.exe -i -r -p %s"
                                  (counsel-unquote-regex-parens
                                   (ivy--regex input t)))
                          'gbk))

刚刚试了一下,可行。

2 个赞

:smile:

在外面用手机,记错函数名了

试试我的方法吧,亲测可行。

不知emacs是否内置探测系统编码的函数,如果有就能智能控制了

谢谢!赞!emacs 社区是我见过最棒的社区!

这个应该是终极解决方案

之前一直不知道有w32-ansi-code-page这个变量,今天看magit代码的时候看到了,(极不情愿地)开了windows试一下,发现居然可以使用

1 个赞

貌似这个在 windows 上面不生效了。。。

参考这个解决了