Deh*_*gYe 10 python unicode utf-8
u''前缀和unicode()?有什么区别?
# -*- coding: utf-8 -*-
print u'??' # this works
print unicode('??', errors='ignore') # this works but print out nothing
print unicode('??') # error
Run Code Online (Sandbox Code Playgroud)
对于第三个print,错误显示:UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xe4
如果我有一个包含非ascii字符的文本文件,例如"上午",如何阅读并正确打印出来?
Mar*_*ers 14
u'..' 是字符串文字,并根据源编码声明解码字符.
unicode()是一个将另一个类型转换为unicode对象的函数,你给它一个字节字符串文字.它将根据默认的ASCII编解码器解码字节字符串.
因此,您使用不同类型的文字表示法创建了一个字节字符串对象,然后尝试将其转换为一个unicode()对象,该对象失败,因为str- > unicode转换的默认编解码器是ASCII.
这两个是完全不同的野兽.如果你想使用后者,你需要给它一个明确的编解码器:
print unicode('??', 'utf8')
Run Code Online (Sandbox Code Playgroud)
这两者的相关方式与使用0xFF和int('0xFF', 0)相关的方式相同; 前者使用十六进制表示法定义值255的整数,后者使用该int()函数从字符串中提取整数.
另一种方法是使用该str.decode()方法:
print '??'.decode('utf8')
Run Code Online (Sandbox Code Playgroud)
除非您知道自己在做什么,否则不要试图使用错误处理程序(例如ignore'或'replace').'ignore'例如,特别是可以通过选择错误的编解码器来掩盖潜在的问题.
您可能想要阅读Python和Unicode:
Ned Batchelder的实用Unicode
绝对最低每个软件开发人员绝对必须知道关于Unicode和字符集(没有任何借口!)作者:Joel Spolsky