4

我正在工作 o scrapy,我抓取了一些网站并将抓取页面中的项目存储到 json 文件中,但其中一些包含以下格式。

l = ["Holding it Together",
     "Fowler RV Trip",
     "S\u00e9n\u00e9gal - Mali - Niger","H\u00eatres et \u00e9tang",
     "Coll\u00e8ge marsan","N\u00b0one",
     "Lines through the days 1 (Arabic) \u0633\u0637\u0648\u0631 \u0639\u0628\u0631 \u0627\u0644\u0623\u064a\u0627\u0645 1",
     "\u00cdndia, Tail\u00e2ndia & Cingapura"]

我可以预期该列表包含不同的格式,但我想将其转换并使用原始名称将字符串存储在列表中,如下所示

l = ["Holding it Together",
     "Fowler RV Trip",
     "Lines through the days 1 (Arabic) سطور عبر الأيام 1 | شمس الدين خ | Blogs"         ,
     "Índia, Tailândia & Cingapura "]

提前致谢...........

4

2 回答 2

7

您有包含 unicode 转义的字节字符串。您可以使用编解码器将它们转换为 unicode unicode_escape

>>> print "H\u00eatres et \u00e9tang".decode("unicode_escape")
Hêtres et étang

您可以将其编码回字节字符串:

>>> s = "H\u00eatres et \u00e9tang".decode("unicode_escape")
>>> s.encode("latin1")
'H\xeatres et \xe9tang'

您可以过滤和解码非 unicode 字符串,例如:

for s in l: 
    if not isinstance(s, unicode): 
        print s.decode('unicode_escape')
于 2012-05-25T07:54:31.517 回答
1

我想转换它并将字符串与其原始名称一起存储在列表中,如下所示

当您序列化为 JSON 时,可能会有一个标志允许您关闭将非 ASCII 字符转义为\u序列。如果您使用的是标准库json模块,它是ensure_ascii

>>> print json.dumps(u'Índia')
"\u00cdndia"
>>> print json.dumps(u'Índia', ensure_ascii= False)
"Índia"

但是请注意,在取消安全措施后,您现在必须能够以正确的方式处理非 ASCII 字符,否则您将得到一堆UnicodeErrors。例如,如果要将 JSON 写入文件,则必须将 Unicode 字符串显式编码为所需的字符集(例如 UTF-8)。

j= json.dumps(u'Índia', ensure_ascii= False)
open('file.json', 'wb').write(j.encode('utf-8'))
于 2012-05-26T08:25:44.913 回答