有什么方法可以在python 3.x和2.x中统一区分str / unicode和bytes / str?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了有什么方法可以在python 3.x和2.x中统一区分str / unicode和bytes / str?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1460字,纯文字阅读大概需要3分钟。
内容图文
![有什么方法可以在python 3.x和2.x中统一区分str / unicode和bytes / str?](/upload/InfoBanner/zyjiaocheng/787/508f3392bb83486ba1454c8b150903f8.jpg)
在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...
解决方法:
考虑使用six,它旨在解决此问题和其他2到3迁移问题.
我仍然建议您提到的from __future import unicode_literals语句,只是为了确保来自您自己的源的字符串得到一致处理,但对于其他所有内容,您可能会发现string-related constants in six很有用:
> six.text_type计算为str in 3和unicode in 2.
> six.binary_type计算为3中的字节和2中的str.
> six.string_types可用于isinstance检查,并计算为str in 3和basestring in 2.
内容总结
以上是互联网集市为您收集整理的有什么方法可以在python 3.x和2.x中统一区分str / unicode和bytes / str?全部内容,希望文章能够帮你解决有什么方法可以在python 3.x和2.x中统一区分str / unicode和bytes / str?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。