我的python web应用程序应该对所有字符串使用unicode吗?

时间:2009-05-05 23:39:38

标签: python django web-applications unicode pylons

我看到一些像Django这样的框架在整个地方使用unicode,所以看起来这可能是一个好主意。

另一方面,让所有这些额外的'u'漂浮在各处似乎是一个巨大的痛苦。

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

如果我这样做,是否会出现任何问题?

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

4 个答案:

答案 0 :(得分:20)

您可以通过执行以下操作来避免python 2.6中的u''

from __future__ import unicode_literals

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

答案 1 :(得分:10)

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

有关详细信息,请参阅Text Vs. Data Instead Of Unicode Vs. 8-bit

答案 2 :(得分:3)

  

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

我是一个住在日本的西方人,所以我亲眼目睹了使用非ASCII字符所需要的东西。如果不使用Unicode字符串,问题在于您的代码会对使用A-Z之外的任何东西的世界各地感到沮丧。我们公司非常沮丧地让某些网络软件做日文字符而不会弄得一团糟。

英语使用者需要花一点力气才能理解Unicode是多么出色,但让计算机可以访问所有文化和语言真的是一项非常棒的工作。

“缺陷”:

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

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

答案 3 :(得分:1)

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

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