Pythonstr或字节数据与unicode字符之间的转换

示例

文件和网络消息的内容可能表示编码的字符。它们通常需要转换为unicode才能正确显示。

在Python 2中,您可能需要将str数据转换为Unicode字符。默认值('',""等)是ASCII字符串,任何ASCII范围以外的值都将显示为转义值。Unicode字符串是u''(或u""等)。

Python 2.x 2.3
# 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它是一个可能被编码为字节的字符串。

Python 3.x 3.0
# 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范围的字节显示为未转义的字符。