编码错误处理

解决 windows,cmd,powershell 乱码

  • 使用 M-x shell
  • 然后 M-x set-language-environment, Chinese-GB
  • 避免在 eshell 里面调用 cmd,以免卡死

局部文字乱码

  • 使用 M-x recode-region

文件乱码

  1. 使用 M-x revert-buffer-with-coding-system

    • 尝试找出正确的 coding-system
    • 快捷键 Ctrl + x <Enter> r
  2. 使用 M-x set-buffer-file-coding-system

    • 设置新的 file-coding-system
  3. 最后 保存文件 save-buffer

eshell 乱码

  • 使用 M-x set-language-environment

    • 参数:Chinese-GB, UTF-8, English

file local variable 防乱码

  • 插入 -*- coding:utf-8 -*-
  • emacs 命令:

    • M-x : add-file-local-variable-prop-line

emacs 编码

buffer 中存在的文字,只要显示正常就行

更改或者说设置,编码

set-buffer-file-coding-system 此命令就已经设置成功,新的编码 虽然看起来没有任何变化

解析编码

或者说尝试,使用新的编码类型,来解析(翻译) 文件, revert-bufffer-with-coding-system

完成新编码,及保存新编码总过程

  1. revert-buffer-with-coding-system 找到合适编码
  2. set-buffer-with-coding-system 设定好上面选择的新编码
  3. C-x C-s, save-buffer 完成,保存

emacs shell 乱码

使用 set-buffer-process-coding-system

language-environment

参考: GNU Emacs Manual - Language Environments

  1. 读:在识别文本的时候起作用
  2. 写:它会设置默认创建文件的 encoding 编码格式
  3. 输入法:设置默认输入法

设置方法: M-x set-language-environment

与操作系统关联:

  • 环境变量

    • LC_ALL
    • LANG
    • LC_CTYPE

描述(查看帮助) language-environment: C-h L or M-x describe-language-environment

Locales

参考: https://www.gnu.org/software/emacs/manual/html_node/elisp/Locales.html

小的语言特性控制。

  • locale-coding-system

    • stderr 的 decoding (在 X windows 上)
    • 键盘输入
    • 时间格式
  • system-messages-locale
  • system-time-locale

shell

1
2
3
4
5
;; 确保中文环境
;; 1. 别的程序输出的正文显示
(set-language-environment 'Chinese-GB)

(setq locale-coding-system 'utf-8)

中文 windows 配置

参考: emacs 在shell下中文乱码解决方案_huaisu 的博客-CSDN博客

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
;; 确保中文环境
;; 1. 别的程序输出的正文显示
(set-language-environment 'Chinese-GBK)

;; 2. 剪切板 中文
(set-selection-coding-system 'utf-16le)

;; 3. 设置默认创建文件默认 utf-8
(setq locale-coding-system 'utf-8)
(set-default buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)