【问题标题】:Should my python web app use unicode for all strings?我的 python web 应用程序应该对所有字符串使用 unicode 吗?
【发布时间】:2010-10-24 01:37:04
【问题描述】:

我看到一些框架,比如 Django,到处都在使用 unicode,所以这似乎是个好主意。

另一方面,让所有这些额外的 'u' 到处飘荡似乎是一种巨大的痛苦。

如果我不这样做会有什么问题?

如果我这样做会出现什么问题吗?

我现在使用 Pylons 作为我的框架。

【问题讨论】:

    标签: python django web-applications unicode pylons


    【解决方案1】:

    在 Python 3 中,所有字符串都是 Unicode。因此,您可以在需要的任何地方使用u'' 字符串为此做好准备,然后当您最终使用2to3 工具升级到Python 3 时,所有us 都会消失。而且您将处于更好的位置,因为您已经使用 Unicode 字符串测试了您的代码。

    更多信息请参见Text Vs. Data Instead Of Unicode Vs. 8-bit

    【讨论】:

      【解决方案2】:

      您可以在 python 2.6 中避免u'',方法是:

      from __future__ import unicode_literals
      

      这将使'string literals' 成为 unicode 对象,就像在 python 3 中一样;

      【讨论】:

      • +1 太糟糕了,这不能与所选答案结合使用。它们都是解决此问题的“最佳”答案。
      【解决方案3】:

      如果我不这样做会有什么问题?

      我是居住在日本的西方人,所以我亲眼目睹了使用非 ASCII 字符需要什么。如果你不使用 Unicode 字符串,问题是你的代码会让世界上那些使用 A-Z 以外的任何东西的人感到沮丧。我们公司在让某些网络软件不把它弄得一团糟的情况下,让某些网络软件写出日文字符而感到非常沮丧。

      说英语的人需要花一点力气才能体会到 Unicode 的伟大之处,但要让计算机能够兼容所有文化和语言确实是一项了不起的工作。

      “陷阱”:

      1. 确保您的输出网页说明正确使用的编码(例如,使用内容编码标头),然后在输出时正确编码所有 Unicode 字符串。 Python 3 Unicode 字符串是一个很好的改进。

      2. 使用 Unicode 字符串执行所有操作,并且仅在最后一刻进行输出时转换为特定编码。其他语言(例如 PHP)在处理 Unicode 时容易出现错误,例如UTF-8 格式。假设您必须截断 Unicode 字符串。如果它在内部采用 UTF-8 格式,则存在中途截断多字节字符的风险,从而导致垃圾输出。 Python 在内部使用 Unicode 字符串使得这些错误更难犯。

      【讨论】:

      • 是的。如果您打算进行任何类型的文本操作(例如,更改大小写、将单词切割成字母),请使用 Python 的 unicode 对象,否则您会感到痛苦。
      【解决方案4】:

      在内部使用 Unicode 是避免非 ASCII 字符问题的好方法。在应用程序的边界进行转换(将传入数据转换为 unicode,将传出数据转换为 UTF-8 或其他)。在许多情况下,Pylons 可以为您进行转换:例如控制器可以安全地返回 unicode 字符串; SQLAlchemy 模型可以声明 Unicode 列。

      关于源代码中的字符串文字:通常不需要 u 前缀。您可以安全地将包含 ASCII 的 str 对象与 unicode 对象混合。只需确保所有字符串文字都是纯 ASCII 或 u"unicode"。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-19
        • 1970-01-01
        • 2019-07-02
        • 2011-12-18
        • 2011-04-01
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多