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)
我对吗?如果是这样,为什么我们有两种不同的方法来完成同样的事情?我应该使用哪一个?有什么微妙的区别吗?
比较两个函数(此处和此处)的文档,两种方法之间的差异似乎确实很小.该unicode功能记录为
如果给出了编码和/或错误,unicode()将使用编解码器解码对象,该对象可以是8位字符串或字符缓冲区.encoding参数是一个给出编码名称的字符串; 如果编码未知,则引发LookupError.错误处理是根据错误完成的; 这指定了对输入编码中无效的字符的处理.如果错误是'严格'(默认值),则会在错误时引发ValueError,...
而string.decode国家的描述
使用为编码注册的编解码器对字符串进行解码.encoding默认为默认字符串编码.可以给出错误以设置不同的错误处理方案.默认值为'strict',表示编码错误会引发UnicodeError....
因此,唯一的区别似乎unicode也适用于字符缓冲区,并且无效输入返回的错误不同(ValueError相对UnicodeError).另一个微小的区别在于向后兼容性:unicode记录为"版本2.0中的新功能",而string.decode"版本2.2中的新功能".
鉴于上述情况,使用哪种方法似乎完全是品味问题.