如果我运行code
# -*- coding: utf-8 -*-
month = "März"
print month.decode("utf-8")
在OS X终端中,我得到字符串März
就好了。
另外,我的emacs(OS X 10.10上的24.5)似乎处理unicode(或至少是变音符号),因为我可以在emacs窗口中看到变音符号。
然而,当我直接从emacs中运行上面的代码时,我得到了:
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中的Message缓冲区?
更新
文件看起来像(通过emacs hexl-mode),如下所示:
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映射到a-umlaut(ä),因此该文件似乎在UTF-8中正确编码。
答案 0 :(得分:0)
此:
# -*- coding: utf-8 -*-
month = "März"
print month.decode("utf-8")
更简单:
# -*- coding: utf-8 -*-
month = u"März" # Use a Unicode string!
print month
#coding: utf8
声明了源文件的编码,因此请确保您的编辑器已配置为以该格式保存文件。
如果在未配置为UTF-8的终端上运行,第一种方法会中断;第二个将适用于为支持ä
字符的任何编码配置的终端。
您显示的错误消息表明month
已经是Unicode,因此Python 2尝试使用默认的ascii
编解码器对其进行编码,然后使用{{1将其解码回Unicode编解码器。这意味着您没有运行上面显示的相同代码,因为该代码使用字节字符串。