如何在python中显示字符非ascii?

时间:2009-05-26 13:53:19

标签: python urllib2

我正在以这种方式使用Python Shell:

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

如何打印s变量来显示字符?这是第一个也是最容易的问题。真的,我从一个网页中获取内容,该网页包含非ascii字符,如前一个和其他字符,如á,é,í,ñ等等。此外,我正在尝试使用这些字符执行正则表达式针对网页内容的模式表达。

如何解决这个问题??

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

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

如果我使用Expresson应用程序正常工作。

编辑[05/26/2009 16:38]: 对不起,关于我的解释。我会试着更好地解释一下。

我必须从页面获取一些文字。我有该页面的网址,我有正则表达式来获取该文本。我认为首先是正则表达式是错误的。我用Expresso检查了它并且工作正常,我得到了我想要的文本。所以,我想到的第二件事就是打印页面的内容,当我看到内容不是我在网页源代码中看到的内容时。差异是非ascii字符,如á,é,í等。现在,我不知道我要做什么,如果问题出在页面内容的编码或正则表达式的模式文本中。我定义的正则表达式之一是前一个。

问题是:使用正则表达式有什么问题吗?模式文本有非ascii字符???

3 个答案:

答案 0 :(得分:2)

如何打印s变量以显示字符Ã???
使用print

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

答案 1 :(得分: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') 

答案 2 :(得分:1)

我会使用ord()来确定字符是否为ASCII /特殊字符:

if ord(c) > 127:
    # special character

这可能不适用于UTF-8等多字节编码。在这种情况下,我会在测试之前转换为Unicode。

如果您从网页获得特殊字符,您应该知道编码。然后对其进行解码,请参阅Unicode HOWTO

编辑:我肯定不确定这个问题是什么......澄清它可能是一个好主意。