python中u''前缀和unicode()有什么区别?

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)

这两者的相关方式与使用0xFFint('0xFF', 0)相关的方式相同; 前者使用十六进制表示法定义值255的整数,后者使用该int()函数从字符串中提取整数.

另一种方法是使用该str.decode()方法:

print '??'.decode('utf8')
Run Code Online (Sandbox Code Playgroud)

除非您知道自己在做什么,否则不要试图使用错误处理程序(例如ignore''replace').'ignore'例如,特别是可以通过选择错误的编解码器来掩盖潜在的问题.

您可能想要阅读Python和Unicode: