在python中将拉丁字符串转换为unicode

在python中将拉丁字符串转换为unicode,python,unicode,scrapy,latin,Python,Unicode,Scrapy,Latin,我正在使用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 (Ara

我正在使用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 "]

提前感谢……。

您有包含unicode转义的字节字符串。您可以使用
unicode\u escape
编解码器将其转换为unicode:

>>> 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')
我想将其转换,并将字符串与其原始名称一起存储在列表中,如下所示

l = ["Holding it Together",
     "Fowler RV Trip",
     "Lines through the days 1 (Arabic) سطور عبر الأيام 1 | شمس الدين خ | Blogs"         ,
     "Índia, Tailândia & Cingapura "]
序列化为JSON时,可能会有一个标志,允许您关闭非ASCII字符到
\u
序列的转义。如果您使用的是标准库
json
模块,则它是
确保ascii

>>> print json.dumps(u'Índia')
"\u00cdndia"
>>> print json.dumps(u'Índia', ensure_ascii= False)
"Índia"
但是,请注意,取消安全措施后,您现在必须能够以正确的方式处理非ASCII字符,否则将出现大量的Unicode错误。例如,如果要将JSON写入文件,则必须将Unicode字符串显式编码为所需的字符集(例如UTF-8)


谢谢,我得到了确切的答案。但是如果列表中有unicode字符串,比如l=[u'Holding it Together',u'Fowler RV Trip'…]呢?实际上,当我运行此命令时,列表中有unicode字符串,我得到了这个错误UnicodeEncodeError:'ascii'编解码器无法对位置1中的字符u'\xe9'进行编码:序号不在范围(128)内“@shivakrishna查看我更新的答案,如何将字符串编码回字节,但这可能无法处理阿拉伯字母。如果您已经使用Unicode,那么问题到底是什么?@shivakrishna或者您是否使用了混合字符串?Unicode和字节?在这种情况下,您可以使用
isinstance(s,unicode)
对它们进行过滤,或者只捕获
UnicodeDecodeError
…感谢您的回答,我得到了我所期望的确切答案,实际上我想在json文件中显示字符串(不转义非ascii字符)。现在,通过上面的代码,我得到了输出,再次感谢。建议始终使用
编解码器
模块将unicode数据写入文件。请参阅Downvote,了解无需安全关闭的文件操作。永远不要举一个坏例子。