文件和网络消息的内容可能表示编码的字符。它们通常需要转换为unicode才能正确显示。
在Python 2中,您可能需要将str数据转换为Unicode字符。默认值('',""等)是ASCII字符串,任何ASCII范围以外的值都将显示为转义值。Unicode字符串是u''(或u""等)。
# You get "© abc" encoded in UTF-8 from a file, network, or other data source s = '\xc2\xa9 abc' # s是字节数组,不是字符串 # 不知道原来是UTF-8 # Python 2中字符串文字的默认形式 s[0] # '\ xc2'-无意义的字节(无上下文,例如编码) type(s) # 力量-即使它不是有用的,没有已知的编码 u = s.decode('utf-8') # u'\ xa9 abc' # 现在我们有了一个Unicode字符串,可以将其读取为UTF-8并正确打印 # 在Python 2中,Unicode字符串文字需要前导u #str.decode将可能包含转义字节的字符串转换为Unicode字符串 u[0] # u'\ xa9'-Unicode字符'COPYRIGHT SIGN'(U + 00A9)'©' type(u) # 统一码 u.encode('utf-8') # '\ xc2 \ xa9 abc' #unicode.encode生成一个字符串,该字符串具有用于非ASCII字符的转义字节
在Python 3中,您可能需要将字节数组(称为“字节文字”)转换为Unicode字符字符串。现在的默认值是Unicode字符串,并且现在必须以b'',b""等输入字节字符串文字。一个字节文字将返回True到isinstance(some_val, byte),假设some_val它是一个可能被编码为字节的字符串。
# You get from file or network "© abc" encoded in UTF-8 s = b'\xc2\xa9 abc' # s是一个字节数组,不是字符 #在Python 3中,默认的字符串文字是Unicode;字节数组文字需要前导b s[0] # b'\ xc2'-无意义的字节(无上下文,例如编码) type(s) # 字节-现在字节数组是显式的,Python可以证明这一点。 u = s.decode('utf-8') # Unicode终端上的“©abc” #bytes.decode将字节数组转换为字符串(在Python 3中为Unicode) u[0] # '\ u00a9'-Unicode字符'COPYRIGHT SIGN'(U + 00A9)'©' type(u) # 力量 # Python 3中的默认字符串文字是UTF-8 Unicode u.encode('utf-8') # b'\ xc2 \ xa9 abc' #str.encode产生一个字节数组,将ASCII范围的字节显示为未转义的字符。