求助:windows下emacs运行shell出现乱码

寻求帮助,如题,使用了图片中配置也没能解决问题~

你设置中文字体了吗?我不用windows,也没遇到过这个问题。你上论坛里搜搜windows中文的问题?我记得有不少帖子。

我设置字体的代码:

(dolist (charset '(kana han symbol cjk-misc bopomofo))
   (set-fontset-font (frame-parameter nil 'font)
                     charset (font-spec :family "FZQingKeBenYueSongS-R-GB"
                                        :size 16)))

"FZQingKeBenYueSongS-R-GB"是我mac上的字体

图中代码应该就是设置的字体啊,gbk是中文字体。

gbk是中文编码,不是中文字体

请教一下,那我图中的配置是否不是设置中文字体,应该如何设置?

我不用shell, 为了防止踩雷我在windows下都是坚持使用eshell.

建议你 M-x prefer-coding-system 设置为gbk看一下. 另外, 设置字体用M-x set-frame-font

1 个赞

测试了eshell,显示仍然有问题,然后尝试按你的建议修改中文编码,出现了这样的提示——》

。。。eshell突然显示又没问题了,shell也没问题了,但是刚才设置编码的提示好像是没有成功啊,神奇~

我也试试,我的也乱码

我是msys2+emacs, 运行shell会有一两个乱码。

我用的是这样的字体配置,能自动在系统中寻找能用的中文字体, 你看看有没有用:

(defun qiang-font-existsp (font)
  (if (null (x-list-fonts font))
      nil
    t))

(defvar font-list '("Microsoft Yahei" "文泉驿等宽微米黑" "黑体" "新宋体" "宋体"))

(require 'cl) ;; find-if is in common list package
(find-if #'qiang-font-existsp font-list)

(defun qiang-make-font-string (font-name font-size)
  (if (and (stringp font-size)
           (equal ":" (string (elt font-size 0))))
      (format "%s%s" font-name font-size)
    (format "%s %s" font-name font-size)))

(defun qiang-set-font (english-fonts
                       english-font-size
                       chinese-fonts
                       &optional chinese-font-size)

  "english-font-size could be set to \":pixelsize=18\" or a integer.
If set/leave chinese-font-size to nil, it will follow english-font-size"
  (require 'cl) ; for find if
  (let ((en-font (qiang-make-font-string
                  (find-if #'qiang-font-existsp english-fonts)
                  english-font-size))
        (zh-font (font-spec :family (find-if #'qiang-font-existsp chinese-fonts)
                            :size chinese-font-size)))

    ;; Set the default English font
    ;;
    ;; The following 2 method cannot make the font settig work in new frames.
    ;; (set-default-font "Consolas:pixelsize=18")
    ;; (add-to-list 'default-frame-alist '(font . "Consolas:pixelsize=18"))
    ;; We have to use set-face-attribute
    (message "Set English Font to %s" en-font)
    (set-face-attribute 'default nil :font en-font)

    ;; Set Chinese font
    ;; Do not use 'unicode charset, it will cause the English font setting invalid
    (message "Set Chinese Font to %s" zh-font)
    (dolist (charset '(kana han symbol cjk-misc bopomofo))
      (set-fontset-font (frame-parameter nil 'font)
                        charset zh-font))))

(qiang-set-font
 '("Consolas" "Monaco" "DejaVu Sans Mono" "Monospace" "Courier New") ":pixelsize=18"
 '("Microsoft Yahei" "文泉驿等宽微米黑" "黑体" "新宋体" "宋体"))

抄自:http://zhuoqiang.me/torture-emacs.html

乱码一般是编码问题,不是字体得问题

  (set-language-info
     "UTF-8"
     'coding-priority
     '(utf-8 gb18030 gbk gb2312 iso-2022-cn chinese-big5 chinese-iso-8bit iso-8859-1))
    (prefer-coding-system 'cp950)
    (prefer-coding-system 'gb2312)
    (prefer-coding-system 'cp936)
    (prefer-coding-system 'gb18030)
    (prefer-coding-system 'utf-16)
    (prefer-coding-system 'utf-8-dos)
    (prefer-coding-system 'utf-8-unix)
    (prefer-coding-system 'utf-8)

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

偶尔有乱码

帮助里好像有说:e.g. 在执行 M-x : shell 之前可以先执行 C-x RET c chinese-gbk-dos