为什么Emacs会使我的文字Unicode字符串错误?

时间:2013-10-29 01:50:29

标签: python emacs unicode

据我所知,这些在使用UTF-8作为默认编码的系统中应该是等效的:

pattern1 = 'Wörterbuch Wortformen'.decode('utf8')
pattern2 = u'Wörterbuch Wortformen'

然而,当我将这些行从Emacs缓冲区发送到Python进程(M-x python-shell-send-region)时,会发生一些奇怪的事情。

>>> pattern1
u'W\xf6rterbuch Wortformen'
>>> pattern2
u'W\xc3\xb6rterbuch Wortformen'

在终端中运行的Python shell中,两行都会生成u'W\xf6rterbuch Wortformen'

这里发生了什么?

我的语言环境配置为使用UTF-8。

2 个答案:

答案 0 :(得分:1)

以下是我的所作所为(稍后可能会有所帮助):

  1. 创建一个单位编码文件,例如/tmp/test.dat使用hexl-mode在Emacs中打开它。

  2. 使用hexl-insert-hex-char命令插入字节C3B6

  3. 以文本形式打开此文件(使用text-mode)。 Emacs将其识别为具有多字节编码的文件,并显示ö代替前一个字节。


  4. 结论:您需要缓冲区中的编码系统,其中包含utf-8的源代码,以便为ö发送两个字节。但是,如果它是单字节编码,并且您选择了将字节F6映射到ö的区域设置,那么您将获得该字节。

    PS。确保您有-*- coding: utf-8 -*-评论。

答案 1 :(得分:1)

事实证明,它是python.el中的bug