在 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)

在哪里可以找到为验证 python 标准库中的函数而进行的测试?

Python常用标准库之os

Python常用标准库之os

《深入实践C++模板编程》之六——标准库中的容器

*.pyd 库中的 C++ Boost Python 方法不起作用