解码和unicode之间的区别?

dan*_*ast 5 python unicode python-2.7

根据这个测试:

# -*- 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)
Run Code Online (Sandbox Code Playgroud)

.decode()和之间没有区别unicode():

aaaaa          5 <type 'unicode'> aaaaa          5 <type 'unicode'>       True
ááááá          5 <type 'unicode'> ááááá          5 <type 'unicode'>       True
?????          5 <type 'unicode'> ?????          5 <type 'unicode'>       True
Run Code Online (Sandbox Code Playgroud)

我对吗?如果是这样,为什么我们有两种不同的方法来完成同样的事情?我应该使用哪一个?有什么微妙的区别吗?

joc*_*hen 6

比较两个函数(此处此处)的文档,两种方法之间的差异似乎确实很小.该unicode功能记录为

如果给出了编码和/或错误,unicode()将使用编解码器解码对象,该对象可以是8位字符串或字符缓冲区.encoding参数是一个给出编码名称的字符串; 如果编码未知,则引发LookupError.错误处理是根据错误完成的; 这指定了对输入编码中无效的字符的处理.如果错误是'严格'(默认值),则会在错误时引发ValueError,...

string.decode国家的描述

使用为编码注册的编解码器对字符串进行解码.encoding默认为默认字符串编码.可以给出错误以设置不同的错误处理方案.默认值为'strict',表示编码错误会引发UnicodeError....

因此,唯一的区别似乎unicode也适用于字符缓冲区,并且无效输入返回的错误不同(ValueError相对UnicodeError).另一个微小的区别在于向后兼容性:unicode记录为"版本2.0中的新功能",而string.decode"版本2.2中的新功能".

鉴于上述情况,使用哪种方法似乎完全是品味问题.