6

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

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

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

如果我这样做会出现任何问题吗?

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

4

4 回答 4

20

您可以通过执行以下操作避免u''在 python 2.6 中出现:

from __future__ import unicode_literals

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

于 2009-05-05T23:55:49.237 回答
10

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

请参阅文本与。数据而不是 Unicode Vs。8 位了解更多信息。

于 2009-05-05T23:43:40.657 回答
3

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

我是居住在日本的西方人,所以我亲眼目睹了使用非 ASCII 字符需要什么。如果您不使用 Unicode 字符串,问题在于您的代码会让世界上使用 AZ 以外的任何其他内容的地区感到沮丧。我们公司非常沮丧地让某些网络软件在不把它弄得一团糟的情况下做日文字符。

说英语的人需要付出一点努力才能体会到 Unicode 的伟大之处,但要让计算机可以访问所有文化和语言确实是一项了不起的工作。

“陷阱”:

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

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

于 2009-05-06T11:29:45.373 回答
1

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

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

于 2009-09-17T19:52:32.567 回答