Python将unicode字符串转换并保存到列表中

时间:2011-10-14 15:15:41

标签: python unicode utf-8

我需要在列表中插入一系列名称(如'Alam \ xc3 \ xa9'),而不是将它们保存到SQLite数据库中。

我知道我可以通过提示正确地呈现这些名称:

print eval(repr(NAME)).decode("utf-8")

但我必须将它们插入列表中,因此我无法使用打印

没有打印的其他方式吗?

2 个答案:

答案 0 :(得分:6)

这里有很多误解。

您引用的字符串是不是 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é

如您所见,使用名称的原始未解码版本reprprint再次显示代码和字符。因此,将它转换为Unicode实际上并不能使它“真正”成为正确的角色。

那么,如果要将其存储在数据库中该怎么办?没有。什么都没有。 Sqlite接受UTF-8输入,并将其数据以UTF-8格式存储在磁盘上。因此,绝对不需要转换来将name的原始值存储在数据库中。

答案 1 :(得分:0)

你在找这样的东西吗?

[n.decode("utf-8") for n in ['Alam\xc3\xa9', 'Alam\xc3\xa9', 'Alam\xc3\xa9']]