在 Python 3.0 中,标准库中的所有内容都会将字符串视为 unicode 吗?
Posted
技术标签:
【中文标题】在 Python 3.0 中,标准库中的所有内容都会将字符串视为 unicode 吗?【英文标题】:Will everything in the standard library treat strings as unicode in Python 3.0? 【发布时间】:2010-09-10 14:39:13 【问题描述】:由于 Python(从 3.0 开始)是基于 unicode 的,我对标准库的行为方式有些困惑。 CGI 和 urllib 等模块会使用 unicode 字符串,还是会使用新的 'bytes' 类型并仅提供编码数据?
【问题讨论】:
也许这个问题不应该由其他程序员来回答,而应该由 Python 开发者来回答(最好是间接地;在这里浏览开发者的讨论:mail.python.org/pipermail/python-3000) 【参考方案1】:这里会有两步舞。见Python 3000 and You。
第 1 步是在 3.0 下运行。
第 2 步是重新考虑您的 API,或许可以做一些更明智的事情。
最有可能的情况是这些库将切换到 unicode 字符串,以尽可能与它们过去的工作方式保持兼容。
然后,也许有些人会改用字节来更正确地实现各种协议的 RFC 标准。
【讨论】:
【参考方案2】:关于这个问题(以及一般的 Python)的一大优点是您可以在解释器中乱搞! Python 3.0 rc1 is currently available for download.
>>> import urllib.request
>>> fh = urllib.request.urlopen('http://www.python.org/')
>>> print(type(fh.read(100)))
<class 'bytes'>
【讨论】:
我同意 - 我今天早上早些时候编译并安装了 rc1,我已经花了太多时间在玩它了!我只是想知道是否有一个标准规则来区分什么是 unicode,什么不是。【参考方案3】:从逻辑上讲,像 MIME 编码的邮件消息、URL、XML 文档等很多东西都应该作为 bytes
而不是字符串返回。这可能会引起一些恐慌,因为库开始为 Python 3 确定下来,人们发现他们必须比str
/unicode
更了解bytes
/string
转换...
【讨论】:
以上是关于在 Python 3.0 中,标准库中的所有内容都会将字符串视为 unicode 吗?的主要内容,如果未能解决你的问题,请参考以下文章
python 标准库中的装饰器(特别是@deprecated)