Python 源代码编码问题
我在Windows上使用Notepad++编辑器,格式设置为ASCII。我看过“PEP 263: 源代码编码”这篇文章,并且根据它修改了我的代码(我觉得是这样),但是仍然有一些字符以十六进制的形式显示出来...
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
a_munge = [ "A", "4", "/\\", "\@", "/-\\", "^", "aye", "?" ]
b_munge = [ "B", "8", "13", "I3", "|3" , "P>", "|:", "!3", "(3", "/3", "3","]3" ]
c_munge = [ "C", "<", "(", "{", "(c)" ]
d_munge = [ "D", "|)", "|o", "?", "])", "[)", "I>", "|>", " ?", "T)", "0", "cl" ]
e_munge = [ "E", "3", "&", "€", "£", "[-", "|=-", "?" ]
.
.
.
3 个回答
1
print some_list
实际上等同于 print repr(some_list)
,所以你看到的是 \u20ac
而不是欧元符号。这是因为在调试时,使用“unicode十六进制”可以更清晰地显示你的数据。
看起来你的列表里有正常的unicode对象;我建议你不要直接把这个列表“打印”到Tkinter上。
2
这一行:
# -*- coding: UTF-8 -*-
声明了这个 源文件 是以 UTF-8 格式保存的。如果不是这样,就会出错。
当你在源代码中声明 字节字符串 时:
e_munge = [ "E", "3", "&", "€", "£", "[-", "|=-", "?" ]
像 "€" 这样的字节字符串实际上会包含保存源文件时使用的编码字节。
如果你使用 Unicode 字符串:
e_munge = [ u"E", u"3", u"&", u"€", u"£", u"[-", u"|=-", u"?" ]
那么当 u 后面跟着字节字符串 "€" 被 Python 从源文件读取时,它会使用声明的编码将这个字符解码成 Unicode。
举个例子:
# coding: utf-8
bs = '€'
us = u'€'
print repr(bs)
print repr(us)
输出:
'\xe2\x82\xac'
u'\u20ac'
2
也许你应该使用 Unicode 字面量,比如 u'€'
,来表示字符。