我的ubuntu运行环境是utf-8
declare -x GDM_LANG="zh_CN.UTF-8"
declare -x LANG="zh_CN.UTF-8"
使用emacs的时候,在.emacs中设置
(set-language-environment 'UTF-8)
(set-keyboard-coding-system 'euc-cn)
(set-clipboard-coding-system 'euc-cn)
(set-terminal-coding-system 'euc-cn)
(set-buffer-file-coding-system 'euc-cn)
(set-selection-coding-system 'euc-cn)
(modify-coding-system-alist 'process "*" 'euc-cn)
(setq default-process-coding-system
'(euc-cn . euc-cn))
(setq-default pathname-coding-system 'euc-cn)
(set-locale-environment nil)
在编辑utf编码的中文文档时没有任何问题,但是当我打开编码为gb2312的文件时,显示不正常,我用C-X RET r命令,然后选择
cn-gb-2312,文件能正常显示,但是当我对文件做出修改以后,保存,我发现emacs会把文件自动以utf-8编码。
不知道大家有没有遇到类似情况,有无指令可以让emacs按照文件本身的编码保存?
先谢过!
求教一个关于在emacs中编码问题
-
- 帖子: 131
- 注册时间: 2006-04-07 14:14
- 来自: 北京
- 联系:
-
- 帖子: 131
- 注册时间: 2006-04-07 14:14
- 来自: 北京
- 联系:
Re: 求教一个关于在emacs中编码问题
谢谢楼上,unicad.el的确是好东西,我刚才试用了一下,现在打开文件编码是没有问题了,可以正确显示!
然而,我这时执行
M-X describe-coding-system时,得到下面的输出:
##输出开始---------
Coding system for saving this buffer:
c -- chinese-iso-8bit-unix
Default coding system (for new files):
u -- mule-utf-8 (alias: utf-8)
Coding system for keyboard input:
c -- euc-cn (alias of chinese-iso-8bit)
Coding system for terminal output:
u -- utf-8 (alias of mule-utf-8)
Defaults for subprocess I/O:
decoding: u -- mule-utf-8 (alias: utf-8)
encoding: u -- mule-utf-8 (alias: utf-8)
Priority order for recognizing coding systems when reading files:
1. mule-utf-8 (alias: utf-8)
2. chinese-iso-8bit (alias: cn-gb-2312 euc-china euc-cn cn-gb gb2312 cp936)
3. chinese-big5 (alias: big5 cn-big5 cp950)
4. iso-2022-cn (alias: chinese-iso-7bit)
5. iso-latin-1 (alias: iso-8859-1 latin-1)
6. mule-utf-16be-with-signature (alias: utf-16be-with-signature mule-utf-16-be utf-16-be)
7. mule-utf-16le-with-signature (alias: utf-16le-with-signature mule-utf-16-le utf-16-le)
8. iso-2022-jp (alias: junet)
9. iso-2022-7bit
10. iso-2022-8bit-ss2
11. emacs-mule
12. raw-text
13. japanese-shift-jis (alias: shift_jis sjis cp932)
14. no-conversion
Other coding systems cannot be distinguished automatically
from these, and therefore cannot be recognized automatically
with the present coding system priorities.
The following are decoded correctly but recognized as iso-2022-cn:
iso-2022-7bit-ss2 iso-2022-7bit-lock iso-2022-7bit-lock-ss2 iso-2022-cn-ext iso-2022-jp-2 iso-2022-kr
Particular coding systems specified for certain file names:
OPERATION TARGET PATTERN CODING SYSTEM(s)
--------- -------------- ----------------
File I/O "\\.dz\\'" (no-conversion . no-conversion)
"\\.g?z\\(~\\|\\.~[0-9]+~\\)?\\'"
(no-conversion . no-conversion)
"\\.tgz\\'" (no-conversion . no-conversion)
"\\.tbz\\'" (no-conversion . no-conversion)
"\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
(no-conversion . no-conversion)
"\\.Z\\(~\\|\\.~[0-9]+~\\)?\\'"
(no-conversion . no-conversion)
"\\.elc\\'" (emacs-mule . emacs-mule)
"\\.utf\\(-8\\)?\\'" utf-8
"\\(\\`\\|/\\)loaddefs.el\\'"
(raw-text . raw-text-unix)
"\\.tar\\'" (no-conversion . no-conversion)
"\\.po[tx]?\\'\\|\\.po\\."
po-find-file-coding-system
"\\.\\(tex\\|ltx\\|dtx\\|drv\\)\\'"
latexenc-find-file-coding-system
"" (undecided)
Process I/O "*" (euc-cn . euc-cn)
Network I/O nothing specified
##输出结束
问题在于
Defaults for subprocess I/O:
decoding: u -- mule-utf-8 (alias: utf-8)
encoding: u -- mule-utf-8 (alias: utf-8)
所以一旦修改文件并保存就把文件的编码变为utf-8了,所以要找到比较好的方法能自适应文件编码,比如是gb2312的,这个地方的encoding也是gb2312就好了

然而,我这时执行
M-X describe-coding-system时,得到下面的输出:
##输出开始---------
Coding system for saving this buffer:
c -- chinese-iso-8bit-unix
Default coding system (for new files):
u -- mule-utf-8 (alias: utf-8)
Coding system for keyboard input:
c -- euc-cn (alias of chinese-iso-8bit)
Coding system for terminal output:
u -- utf-8 (alias of mule-utf-8)
Defaults for subprocess I/O:
decoding: u -- mule-utf-8 (alias: utf-8)
encoding: u -- mule-utf-8 (alias: utf-8)
Priority order for recognizing coding systems when reading files:
1. mule-utf-8 (alias: utf-8)
2. chinese-iso-8bit (alias: cn-gb-2312 euc-china euc-cn cn-gb gb2312 cp936)
3. chinese-big5 (alias: big5 cn-big5 cp950)
4. iso-2022-cn (alias: chinese-iso-7bit)
5. iso-latin-1 (alias: iso-8859-1 latin-1)
6. mule-utf-16be-with-signature (alias: utf-16be-with-signature mule-utf-16-be utf-16-be)
7. mule-utf-16le-with-signature (alias: utf-16le-with-signature mule-utf-16-le utf-16-le)
8. iso-2022-jp (alias: junet)
9. iso-2022-7bit
10. iso-2022-8bit-ss2
11. emacs-mule
12. raw-text
13. japanese-shift-jis (alias: shift_jis sjis cp932)
14. no-conversion
Other coding systems cannot be distinguished automatically
from these, and therefore cannot be recognized automatically
with the present coding system priorities.
The following are decoded correctly but recognized as iso-2022-cn:
iso-2022-7bit-ss2 iso-2022-7bit-lock iso-2022-7bit-lock-ss2 iso-2022-cn-ext iso-2022-jp-2 iso-2022-kr
Particular coding systems specified for certain file names:
OPERATION TARGET PATTERN CODING SYSTEM(s)
--------- -------------- ----------------
File I/O "\\.dz\\'" (no-conversion . no-conversion)
"\\.g?z\\(~\\|\\.~[0-9]+~\\)?\\'"
(no-conversion . no-conversion)
"\\.tgz\\'" (no-conversion . no-conversion)
"\\.tbz\\'" (no-conversion . no-conversion)
"\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
(no-conversion . no-conversion)
"\\.Z\\(~\\|\\.~[0-9]+~\\)?\\'"
(no-conversion . no-conversion)
"\\.elc\\'" (emacs-mule . emacs-mule)
"\\.utf\\(-8\\)?\\'" utf-8
"\\(\\`\\|/\\)loaddefs.el\\'"
(raw-text . raw-text-unix)
"\\.tar\\'" (no-conversion . no-conversion)
"\\.po[tx]?\\'\\|\\.po\\."
po-find-file-coding-system
"\\.\\(tex\\|ltx\\|dtx\\|drv\\)\\'"
latexenc-find-file-coding-system
"" (undecided)
Process I/O "*" (euc-cn . euc-cn)
Network I/O nothing specified
##输出结束
问题在于
Defaults for subprocess I/O:
decoding: u -- mule-utf-8 (alias: utf-8)
encoding: u -- mule-utf-8 (alias: utf-8)
所以一旦修改文件并保存就把文件的编码变为utf-8了,所以要找到比较好的方法能自适应文件编码,比如是gb2312的,这个地方的encoding也是gb2312就好了
smartcar 写了:我的ubuntu运行环境是utf-8
declare -x GDM_LANG="zh_CN.UTF-8"
declare -x LANG="zh_CN.UTF-8"
使用emacs的时候,在.emacs中设置
(set-language-environment 'UTF-8)
(set-keyboard-coding-system 'euc-cn)
(set-clipboard-coding-system 'euc-cn)
(set-terminal-coding-system 'euc-cn)
(set-buffer-file-coding-system 'euc-cn)
(set-selection-coding-system 'euc-cn)
(modify-coding-system-alist 'process "*" 'euc-cn)
(setq default-process-coding-system
'(euc-cn . euc-cn))
(setq-default pathname-coding-system 'euc-cn)
(set-locale-environment nil)
在编辑utf编码的中文文档时没有任何问题,但是当我打开编码为gb2312的文件时,显示不正常,我用C-X RET r命令,然后选择
cn-gb-2312,文件能正常显示,但是当我对文件做出修改以后,保存,我发现emacs会把文件自动以utf-8编码。
不知道大家有没有遇到类似情况,有无指令可以让emacs按照文件本身的编码保存?
先谢过!
-
- 帖子: 131
- 注册时间: 2006-04-07 14:14
- 来自: 北京
- 联系:
Re: 求教一个关于在emacs中编码问题
抱歉,根据二楼的建议已经解决问题了,有些东西我刚才理解错了,结帖!

smartcar 写了:谢谢楼上,unicad.el的确是好东西,我刚才试用了一下,现在打开文件编码是没有问题了,可以正确显示!![]()
然而,我这时执行
M-X describe-coding-system时,得到下面的输出:
##输出开始---------
Coding system for saving this buffer:
c -- chinese-iso-8bit-unix
Default coding system (for new files):
u -- mule-utf-8 (alias: utf-8)
Coding system for keyboard input:
c -- euc-cn (alias of chinese-iso-8bit)
Coding system for terminal output:
u -- utf-8 (alias of mule-utf-8)
Defaults for subprocess I/O:
decoding: u -- mule-utf-8 (alias: utf-8)
encoding: u -- mule-utf-8 (alias: utf-8)
Priority order for recognizing coding systems when reading files:
1. mule-utf-8 (alias: utf-8)
2. chinese-iso-8bit (alias: cn-gb-2312 euc-china euc-cn cn-gb gb2312 cp936)
3. chinese-big5 (alias: big5 cn-big5 cp950)
4. iso-2022-cn (alias: chinese-iso-7bit)
5. iso-latin-1 (alias: iso-8859-1 latin-1)
6. mule-utf-16be-with-signature (alias: utf-16be-with-signature mule-utf-16-be utf-16-be)
7. mule-utf-16le-with-signature (alias: utf-16le-with-signature mule-utf-16-le utf-16-le)
8. iso-2022-jp (alias: junet)
9. iso-2022-7bit
10. iso-2022-8bit-ss2
11. emacs-mule
12. raw-text
13. japanese-shift-jis (alias: shift_jis sjis cp932)
14. no-conversion
Other coding systems cannot be distinguished automatically
from these, and therefore cannot be recognized automatically
with the present coding system priorities.
The following are decoded correctly but recognized as iso-2022-cn:
iso-2022-7bit-ss2 iso-2022-7bit-lock iso-2022-7bit-lock-ss2 iso-2022-cn-ext iso-2022-jp-2 iso-2022-kr
Particular coding systems specified for certain file names:
OPERATION TARGET PATTERN CODING SYSTEM(s)
--------- -------------- ----------------
File I/O "\\.dz\\'" (no-conversion . no-conversion)
"\\.g?z\\(~\\|\\.~[0-9]+~\\)?\\'"
(no-conversion . no-conversion)
"\\.tgz\\'" (no-conversion . no-conversion)
"\\.tbz\\'" (no-conversion . no-conversion)
"\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
(no-conversion . no-conversion)
"\\.Z\\(~\\|\\.~[0-9]+~\\)?\\'"
(no-conversion . no-conversion)
"\\.elc\\'" (emacs-mule . emacs-mule)
"\\.utf\\(-8\\)?\\'" utf-8
"\\(\\`\\|/\\)loaddefs.el\\'"
(raw-text . raw-text-unix)
"\\.tar\\'" (no-conversion . no-conversion)
"\\.po[tx]?\\'\\|\\.po\\."
po-find-file-coding-system
"\\.\\(tex\\|ltx\\|dtx\\|drv\\)\\'"
latexenc-find-file-coding-system
"" (undecided)
Process I/O "*" (euc-cn . euc-cn)
Network I/O nothing specified
##输出结束
问题在于
Defaults for subprocess I/O:
decoding: u -- mule-utf-8 (alias: utf-8)
encoding: u -- mule-utf-8 (alias: utf-8)
所以一旦修改文件并保存就把文件的编码变为utf-8了,所以要找到比较好的方法能自适应文件编码,比如是gb2312的,这个地方的encoding也是gb2312就好了
smartcar 写了:我的ubuntu运行环境是utf-8
declare -x GDM_LANG="zh_CN.UTF-8"
declare -x LANG="zh_CN.UTF-8"
使用emacs的时候,在.emacs中设置
(set-language-environment 'UTF-8)
(set-keyboard-coding-system 'euc-cn)
(set-clipboard-coding-system 'euc-cn)
(set-terminal-coding-system 'euc-cn)
(set-buffer-file-coding-system 'euc-cn)
(set-selection-coding-system 'euc-cn)
(modify-coding-system-alist 'process "*" 'euc-cn)
(setq default-process-coding-system
'(euc-cn . euc-cn))
(setq-default pathname-coding-system 'euc-cn)
(set-locale-environment nil)
在编辑utf编码的中文文档时没有任何问题,但是当我打开编码为gb2312的文件时,显示不正常,我用C-X RET r命令,然后选择
cn-gb-2312,文件能正常显示,但是当我对文件做出修改以后,保存,我发现emacs会把文件自动以utf-8编码。
不知道大家有没有遇到类似情况,有无指令可以让emacs按照文件本身的编码保存?
先谢过!
-
- 帖子: 131
- 注册时间: 2006-04-07 14:14
- 来自: 北京
- 联系:
Re: 求教一个关于在emacs中编码问题
哦,是么?这个还没有发现,我平时自己的文件都用utf-8编码,但是同事的程序防盗svn的时候已经是gb2312的编码了,像程序中的一些常量字符串,就是gb2312了,如果我用emacs编辑而不自觉的情况下把这些文件变成utf-8的,那么就可能带来很多问题,昨天用unicad后,能初步解决这个问题了
我发现如果能比较了解Lisp语言(一直没时间好好去学习一下,准备元旦花时间学习学习),可能会有很多帮助,另外emacs的文档也是不少啊,昨天顺便读了一些关于emacs国际化那部分的,疑惑还是比较多。
再次感谢哈!

我发现如果能比较了解Lisp语言(一直没时间好好去学习一下,准备元旦花时间学习学习),可能会有很多帮助,另外emacs的文档也是不少啊,昨天顺便读了一些关于emacs国际化那部分的,疑惑还是比较多。
再次感谢哈!
qkbeyond 写了:其实这个也是有点小bugs的
偶平时如果不是实在太乱的码,我都没开过