我的Python网页应用是否应该对所有字符串使用Unicode?
我看到一些框架,比如Django,到处都在使用unicode,看起来这可能是个好主意。
但另一方面,似乎到处都有这些多余的'u',这让人觉得很麻烦。
如果我不这样做,会有什么问题吗?
如果我这样做,会出现什么问题吗?
我现在正在使用Pylons作为我的框架。
4 个回答
如果我不这样做,会有什么问题呢?
我是一名在日本生活的西方人,所以我亲眼见证了处理非ASCII字符时需要注意的事项。如果你不使用Unicode字符串,问题就来了:你的代码会让那些使用A-Z以外字符的地方的人感到很困扰。我们公司在让某些网络软件支持日文字符时,遇到了很多麻烦,结果搞得一团糟。
对于说英语的人来说,理解Unicode有多重要需要一点时间,但它确实是一个很棒的成果,让计算机能够支持所有文化和语言。
一些注意事项:
确保你的网页输出正确声明所使用的编码(比如使用内容编码头),然后在输出时正确编码所有Unicode字符串。Python 3的Unicode字符串在这方面做得很好。
尽量使用Unicode字符串,只有在最后输出时才转换为特定的编码。其他语言,比如PHP,在处理UTF-8格式的Unicode时容易出错。比如说,你需要截断一个Unicode字符串。如果它在内部是UTF-8格式,可能会有风险,导致你把一个多字节的字符截断一半,结果输出的内容就会变得很糟糕。Python内部使用Unicode字符串,这样就更不容易犯这种错误。
在Python 2.6中,你可以通过以下方式避免出现u''
:
from __future__ import unicode_literals
这样做会让'字符串文字'
变成Unicode对象,就像在Python 3中一样;
在Python 3中,所有的字符串都是Unicode格式的。这意味着你可以在需要的地方使用u''
这种字符串格式来提前做好准备。等你最终升级到Python 3时,所有的u
前缀都会消失。这样你就能更好地适应,因为你已经用Unicode字符串测试过你的代码了。
想了解更多信息,可以查看文本与数据,而不是Unicode与8位。