5

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

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

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

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

编辑:瑞典网站上的编码是 utf-8,我网站上的编码也是 utf-8。EDIT2:您可以将 ISO-8859-10 用于瑞典语,但根据 google chrome,此特定站点上的编码是 Unicode(utf-8)

4

2 回答 2

9

始终使用 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 öäå
于 2012-04-15T19:31:01.627 回答
0

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

首先检查您的值re.UNICODE,请参阅

于 2012-04-15T19:32:29.247 回答