Python 源代码编码问题

0 投票
3 回答
757 浏览
提问于 2025-04-15 18:22

我在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'€',来表示字符。

撰写回答