python的编码与解码
Posted gc373195040
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的编码与解码相关的知识,希望对你有一定的参考价值。
#########################
# Python中的字符类型 #
#########################
# Python中的字符类型分两种:
# 1. str类型:ascii表中的字符,占一个字节,所以也叫字节字符。字面量用双引号表示。
# 2. unicode类型:一个字符串占用的字节数由保存时采用的编码格式相关。字面量用带“u”前缀的双引号表示。
s = ‘OK, ‘
u = u‘我, ‘
u1 = u‘我‘
u2 = u‘爱Python‘
print ‘s:‘, s
print ‘u1:‘, u1
print ‘u2:‘, u2
# 解析器通常把unicode字符转换成Unicode转义序列
# 转义序列以"u"开头
print ‘repr(s): ‘, repr(s)
print ‘repr(u1): ‘, repr(u1)
print ‘repr(u2): ‘, repr(u2)
# 这种转义序列只在unicode字面量中有效
print "‘u6211‘: ", ‘u6211‘
print "u‘u6211‘: ", u‘u6211‘
print ‘‘
# 也可以用str()函数创建str字符串,用unicode()函数创建unicode字符串
print ‘type of str(s): ‘, type(str(s))
print ‘type of unicode(s): ‘, type(unicode(s))
# 可以给unicode()函数传入一个unicode字符串
print ‘type of unicode(u): ‘, type(unicode(u))
# 但是如果我们给unicode()函数传入‘我‘,又会怎样呢?
try:
print "unicode(‘我‘):", unicode(‘我‘)
except UnicodeDecodeError as e:
# 错误信息
# 解析器试图用ascii编码来解码我们传入的参数,原因会在下面将到
print e
#########################
# 编码和解码 #
#########################
# 编码的过程其实就是采用一定的编码格式将unicode字符转换成str字符的过程
# 非ascii码字符按字节为单位被编码成十六进制转义字符
# 解码采用的编码格式跟设置和环境有关
utf8_s = s.encode(‘utf-8‘)
utf8_u = u.encode(‘utf-8‘)
utf8_u1 = u1.encode(‘utf-8‘)
utf8_u2 = u2.encode(‘utf-8‘)
print ‘utf8_s: ‘, s
print ‘repr utf8_u: ‘, repr(s)
print ‘utf8_u: ‘, u
print ‘repr utf8_u: ‘, repr(utf8_u)
print ‘utf8_u1: ‘, utf8_u1
print ‘repr utf8_u1: ‘, repr(utf8_u1)
print ‘utf8_u2:‘, utf8_u2
print ‘repr utf8_u2: ‘, repr(utf8_u2)
# 如果我们的str字面量中有非ascii码字符,解析器会自动对其进行编码
print "‘我爱Python‘: ", ‘我爱Python‘
print "repr ‘我爱Python‘: ", repr(‘我爱Python‘)
# 来看看上面碰到的问题,我们将带‘我’(str类型)传给unicode函数,结果报错了
try:
print "unicode(‘我‘):", unicode(‘我‘)
except UnicodeDecodeError as e:
# 发生错误了,解析器试图用ascii编码来解码我们传入的参数
print e
# 原因就是解析器会先将参数用默认的编码格式(这里是utf-8)进行编码,然后传给unicode()函数,
# unicode函数的帮助信息,其中有段是这么说的:
‘‘‘unicode(string[, encoding[, errors]]) -> unicode object
|
| Create a new Unicode object from the given encoded string.
| encoding defaults to the current default string encoding.