Mar*_* L. 0 python unicode utf-8
我需要在列表中插入一系列名称(如'Alam\xc3\xa9'),而不是将它们保存到SQLite数据库中.
我知道我可以通过tiping正确渲染这些名称:
print eval(repr(NAME)).decode("utf-8")
Run Code Online (Sandbox Code Playgroud)
但我必须将它们插入列表中,所以我不能使用打印
没有打印的其他方法吗?
这里有很多很多误解.
您引用的字符串不是 Unicode.它是一个字节字符串,以UTF-8编码.
您可以通过解码将其转换为Unicode :
unicode_name = name.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
当您将值打印unicode_name到控制台时,您将看到以下两种情况之一:
>>> unicode_name
u'Alam\xe9'
>>> print unicode_name
Alamé
Run Code Online (Sandbox Code Playgroud)
在这里,您可以看到只需键入名称并按Enter键即可显示Unicode代码点的表示形式.这与打字相同print repr(unicode_name).但是,在print unicode_name打印实际字符时 - 即在幕后,它会将其编码为终端的正确编码,并打印结果.
但这一切都无关紧要,因为Unicode字符串只能在内部表示.只要您想将其存储在数据库,文件或任何地方,就需要对其进行编码.最有可能选择的编码是UTF-8 - 这就是最初的编码.
>>> name
'Alam\xc3\xa9'
>>> print name
Alamé
Run Code Online (Sandbox Code Playgroud)
如您所见,使用原始的非解码版本的名称,repr并print再次显示代码和字符.因此,将它转换为Unicode实际上并不能使它成为"真正"正确的角色.
那么,如果要将其存储在数据库中该怎么办?没有.什么都没有.Sqlite接受UTF-8输入,并将其数据以UTF-8格式存储在磁盘上.因此,绝对不需要转换来存储name数据库中的原始值.