<分区>
在 python 2.x 中,有称为 unicode
的 unicode 字符字符串和称为 str
的字节字符串,它们经常被误用于文本数据,因为它是默认值。幸运的是,python 3.x 通过默认为 py2 unicode
并让用户在处理二进制数据或编码文本时选择 py2 str
解决了这个问题.但它也将 py2 unicode
重命名为 str
并将 py2 str
重命名为 bytes
。
我知道为 3.x 和 2.x 编写代码以区分它们的多种方法,但我想知道其他关于哪些方法最好的方法以及为什么最好的意见,并可能了解我不喜欢的方法还不知道我也知道某些方法可能更适合某些情况,因此请随时在您的答案中公开所有这些方法。
这个问题也让其他人选择最佳选项,但有人提醒我这是一个见仁见智的问题。
所以这是我所知道的方法...
使用 ""的类型并强制其为 unicode 类型:
from __future__ import unicode_literals
if isinstance(string, type("")):
...
捕获 NameError 异常并使用特定于版本的代码。
似乎行不通的想法...
使用 getattr()
检查 encode()
和 decode()
方法,因为 Python 2.x 似乎同时使用这两种方法两种类型。
由于我无法再添加任何答案,所以这是我最终要使用的:
# Ensure compatibility with Python < 2.7 (2.7 uses bytes as an alias for str).
if 'bytes' not in vars():
bytes = str
if isinstance(name, bytes):
...byte string...
else:
...unicode string...