如何获取正则表达式将非ASCII字符识别为字母?

时间:2012-04-15 19:02:41

标签: python regex utf-8 character-encoding ascii

我正在从瑞典语的网页中提取信息。此页面使用的字符如下:öäå。

我的问题是,当我打印信息时,öä已经消失了。

我正在使用Beautiful Soup提取信息。我认为问题是我在我提取的字符串上做了一堆正则表达式,例如location = re.sub(r'([^\w])+', '', location)删除除字母之外的所有内容。在此之前,我猜美丽的汤编码了字符串,以便öäå变成/ x02 /,十六进制值。

所以,如果我是正确的,那么正则表达式正在移除öäå,对,我的意思是在正则表达式之后唯一剩下的六角形字符是x,但在我的页面上没有x而不是öäå那么这个小理论可能不正确?无论如何,如果是对或错,你如何解决这个问题?当我稍后将提取的信息打印到我的网页时,我在谷歌应用引擎中使用self.response.out.write()(不知道是否有帮助解决问题)

编辑:瑞典网站上的编码是utf-8,我网站上的编码也是utf-8。 EDIT2:您可以使用ISO-8859-10 for Swedish,但根据谷歌浏览器,此特定网站上的编码为Unicode(utf-8)

2 个答案:

答案 0 :(得分:8)

始终使用unicode ,并且只在必要时才转换为编码表示。

对于这种特殊情况,您还需要使用re.U标记,以便\w匹配unicode字母:

#coding: utf-8

import re

location = "öäå".decode('utf-8')
location = re.sub(r'([^\w])+', '', location, flags=re.U)

print location # prints öäå

答案 1 :(得分:0)

如果您可以在每个步骤之前和之后转储字符串,这将有所帮助。

首先检查re.UNICODE的值,参见this