为什么Emacs把我的文本Unicode字符串弄错了?

2024-10-01 13:34:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

在终端中运行的pythonshell中,这两行结果都是u'W\xf6rterbuch Wortformen'。在

这是怎么回事?在

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


Tags: send编码进程系统utf8shellregionutf
2条回答

原来它是python.el中的bug。在

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

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

  2. 使用hexl-insert-hex-char命令插入字节C3和{}。

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


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

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

相关问题 更多 >