Sylv
2015-06-21 18:02:41 +08:00
S 是 latin-1 编码的 str 类型字符串
U 是 unicode 类型字符串,存储的不是编码,而是码点
S + U:是一个 str 类型字符串加一个 unicode 类型字符串,类型不一致,所以 Python 会把 str 类型的 S 用默认编码 ascii 转换为 unicode 类型。因此 S + U 等价于:S.decode('ascii') + U。
而字符串 S 是不能用 ascii 编码转换为 unicode 的,要用 latin-1编码:
>>> S.decode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 1: ordinal not in range(128)
>>> S.decode('latin-1')
u'A\xc4B\xe8C'
因此想要不报错需要:
S.decode('latin-1') + U