【问题标题】:Will everything in the standard library treat strings as unicode in Python 3.0?在 Python 3.0 中,标准库中的所有内容都会将字符串视为 unicode 吗?
【发布时间】:2010-09-10 14:39:13
【问题描述】:

由于 Python(从 3.0 开始)是基于 unicode 的,我对标准库的行为方式有些困惑。 CGI 和 urllib 等模块会使用 unicode 字符串,还是会使用新的 'bytes' 类型并仅提供编码数据?

【问题讨论】:

  • 也许这个问题不应该由其他程序员来回答,而应该由 Python 开发者来回答(最好是间接地;在这里浏览开发者的讨论:mail.python.org/pipermail/python-3000

标签: python unicode string cgi python-3.x


【解决方案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 转换...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2016-06-29
      • 2016-07-25
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      相关资源
      最近更新 更多