如何在Python中显示非ASCII字符?

0 投票
3 回答
3407 浏览
提问于 2025-04-15 11:50

我在使用Python Shell,方式如下:

>>> s = 'Ã'
>>> s
'\xc3'

我该如何打印变量s,以显示字符Ã??? 这是第一个也是最简单的问题。实际上,我是从一个网页获取内容,这个网页有一些非ASCII字符,比如前面提到的,还有一些带波浪号的字符,比如á、é、í、ñ等等。此外,我还想用正则表达式处理这些字符,来匹配网页内容。

我该如何解决这个问题呢?

这是一个正则表达式的例子:

u'<td[^>]*>\s*Definición\s*</td><td class="value"[^>]*>\s*(?P<data>[\w ,-:\.\(\)]+)\s*</td>'

如果我使用Expresson这个应用程序,它运行得很好。

编辑[2009年5月26日 16:38]: 抱歉,我的解释不够清楚。我会尽量解释得更好。

我需要从一个页面获取一些文本。我有那个页面的URL,也有用来获取文本的正则表达式。我首先想到的是正则表达式可能有问题。我用Expresso检查了一下,结果很好,得到了我想要的文本。接下来,我想打印网页的内容,这时我发现内容和我在网页源代码中看到的并不一样。不同之处在于那些非ASCII字符,比如á、é、í等等。现在,我不知道该怎么做,也不确定问题出在网页内容的编码上,还是正则表达式的模式文本上。我定义的其中一个正则表达式就是前面提到的那个。

我的问题是:使用包含非ASCII字符的正则表达式模式文本,会有问题吗??

3 个回答

1

我会用 ord() 来判断一个字符是不是ASCII字符或者特殊字符:

if ord(c) > 127:
    # special character

不过,这个方法可能不适用于像UTF-8这样的多字节编码。在这种情况下,我会先转换成Unicode再进行测试。

如果你从网页上获取了特殊字符,你需要知道它的编码方式。然后进行解码,具体可以参考一下 Unicode入门指南

补充一下:我其实不太确定这个问题具体指的是什么……可能需要进一步澄清一下。

2

我该如何打印变量 s 来显示字符 Ã???
使用 print:

>>> s = 'Ã'
>>> s
'\xc3'
>>> print s
Ã
2

假设你想以utf-8格式打印文本。在Python 3之前,最好的方法是特别进行编码。

print u'Ã'.encode('utf-8')

如果你是从外部获取文本,那么你需要特别解码成'utf-8'格式,比如这样:

f = open(my_file)
a = f.next().decode('utf-8') # you have a unicode line in a
print a.encode('utf-8') 

撰写回答