[英]Python convert and save unicode string to a list
我需要在列表中插入一系列名称(例如'Alam \\ xc3 \\ xa9'),然后我必须将它们保存到SQLite数据库中。
我知道我可以通过提示正确显示这些名称:
print eval(repr(NAME)).decode("utf-8")
但是我必须将它们插入列表中,所以我不能使用打印
不用打印的其他方法吗?
这里有很多误解。
您引用的字符串不是 Unicode。 它是一个字节字符串,以UTF-8编码。
您可以通过解码将其转换为Unicode:
unicode_name = name.decode('utf-8')
当您将unicode_name
的值打印到控制台时,您将看到以下两种情况之一:
>>> unicode_name
u'Alam\xe9'
>>> print unicode_name
Alamé
在这里,您可以看到仅键入名称并按Enter键即可显示Unicode代码点的表示形式。 这与键入print repr(unicode_name)
。 但是,执行print unicode_name
打印实际的字符-即在幕后,将其编码为终端的正确编码,然后打印结果。
但这都是无关紧要的,因为Unicode字符串只能在内部表示。 要将其存储在数据库,文件或任何位置中后,就需要对其进行编码。 最有可能选择的编码是UTF-8,这就是它原来的格式。
>>> name
'Alam\xc3\xa9'
>>> print name
Alamé
如您所见,使用名称的原始未解码版本, repr
并再次print
显示代码和字符。 因此,并不是将其转换为Unicode实际上会使它“真正地”成为正确的字符。
那么,如果要将其存储在数据库中怎么办? 没有。 没事 Sqlite接受UTF-8输入,并将其数据以UTF-8格式存储在磁盘上。 因此,绝对不需要转换即可将name
的原始值存储在数据库中。
您是否正在寻找这样的东西?
[n.decode("utf-8") for n in ['Alam\xc3\xa9', 'Alam\xc3\xa9', 'Alam\xc3\xa9']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.