首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将unicode输出到emacs消息缓冲区?

如何将unicode输出到emacs消息缓冲区?
EN

Stack Overflow用户
提问于 2016-02-23 16:43:03
回答 1查看 294关注 0票数 0

如果我运行code

代码语言:javascript
复制
# -*- coding: utf-8 -*-
month = "März"
print month.decode("utf-8")

在OS终端中,我可以得到字符串März

而且,我的emacs (OSX10.10上的24.5)似乎可以很好地处理unicode (或至少umlauts),因为我可以在emacs窗口中看到umlaut。

然而,当我直接从emacs内部运行上面的代码时,我得到:

代码语言:javascript
复制
Traceback (most recent call last):
  File "unicode-umlaut.py", line 3, in <module>
    print month.decode("utf-8")
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 1: ordinal not in range(128)

这是什么意思?这是否意味着即使emacs正在处理拉丁文-1字符,emacs消息缓冲区拒绝处理unicode?是否有一个补丁可以将非ascii字符输出到emacs中的消息缓冲区?

更新:

按字节计算,文件看起来(通过emacs十六进制模式)如下所示:

代码语言:javascript
复制
00000000: 2320 2d2a 2d20 636f 6469 6e67 3a20 7574  # -*- coding: ut
00000010: 662d 3820 2d2a 2d0a 6d6f 6e74 6820 3d20  f-8 -*-.month = 
00000020: 224d c3a4 727a 220a 7072 696e 7420 6d6f  "M..rz".print mo
00000030: 6e74 682e 6465 636f 6465 2822 7574 662d  nth.decode("utf-
00000040: 3822 290a                                8").

c3a4映射到and (),因此该文件似乎在UTF-8中被正确编码.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-25 00:27:28

这是:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
month = "März"
print month.decode("utf-8")

是更简单的:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
month = u"März"   # Use a Unicode string!
print month

#coding: utf8声明源文件的编码,因此确保您的编辑器配置为以该格式保存文件。

如果在未配置为utf-8的终端上运行,第一种方式将中断;第二种方式将在为支持ä字符的任何编码配置的终端上工作。

您所显示的错误消息表明month已经是Unicode,因此Python2试图在使用utf8编解码器将其解码回Unicode之前用默认的utf8编解码器对其进行编码。这意味着您不运行上面显示的相同的代码,因为该代码使用一个字节字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35583218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档