根据这个测试:
# -*- coding: utf-8 -*- ENCODING = 'utf-8' # what is the difference between decode and unicode? test_cases = [ 'aaaaa', 'ááááá', '?????', ] FORMAT = '%-10s %5d %-10s %-10s %5d %-10s %10s' for text in test_cases : decoded = text.decode(ENCODING) unicoded = unicode(text, ENCODING) equal = decoded == unicoded print FORMAT % (decoded, len(decoded), type(decoded), unicoded, len(unicoded), type(unicoded), equal)
.decode()
和之间没有区别unicode()
:
aaaaa 5aaaaa 5 True ááááá 5 ááááá 5 True ????? 5 ????? 5 True
我对吗?如果是这样,为什么我们有两种不同的方法来完成同样的事情?我应该使用哪一个?有什么微妙的区别吗?
比较两个函数(此处和此处)的文档,两种方法之间的差异似乎确实很小.该unicode
功能记录为
如果给出了编码和/或错误,unicode()将使用编解码器解码对象,该对象可以是8位字符串或字符缓冲区.encoding参数是一个给出编码名称的字符串; 如果编码未知,则引发LookupError.错误处理是根据错误完成的; 这指定了对输入编码中无效的字符的处理.如果错误是'严格'(默认值),则会在错误时引发ValueError,...
而string.decode
国家的描述
使用为编码注册的编解码器对字符串进行解码.encoding默认为默认字符串编码.可以给出错误以设置不同的错误处理方案.默认值为'strict',表示编码错误会引发UnicodeError....
因此,唯一的区别似乎unicode
也适用于字符缓冲区,并且无效输入返回的错误不同(ValueError
相对UnicodeError
).另一个微小的区别在于向后兼容性:unicode
记录为"版本2.0中的新功能",而string.decode
"版本2.2中的新功能".
鉴于上述情况,使用哪种方法似乎完全是品味问题.