要跟随best practices for Unicode in python,您应该在字符的所有字符串文字前加上“u”。有没有可用的工具(最好是PyDev兼容的),如果你忘了它就会发出警告?
答案 0 :(得分:4)
你应该在所有字符串文字前加上'u'
不,不是真的。
您应该为具有u
的字符串添加文字前缀。但并非所有字符串都是字符串。在与基于字节的组件(如网络服务或二进制文件)进行通信时,您需要使用字节字符串。
例如。想尝试将Unicode字符串写入PNG文件?不明智。想要对字符串Y2Fm6Q==
进行base64解码吗?你不能在这里合理地使用Unicode字符串,base64显式是字节。
当然,Python通常会让你通过传递一个需要字节字符串的unicode字符串,但只能自动编码为ASCII。如果字符串包含非ASCII字符,那么您将获得UnicodeError
,就像您使用了预期使用unicode的字节一样。 “Unicode是对的,字节错误”是一个具有破坏性的神话。需要对两种字符串进行操作。
如果您担心过渡到Python 3,您当然应该将字符串标记为u''
,但是您还应该将显式字节字符串标记为b''
。无关紧要的字符串可以保留''
并让它们在Python 3上从字节字符串转换为unicode字符串。很多情况下Python 2使用字节而Python 3使用Unicode这样做是合适的。但是仍然有很多情况你确实需要讨论字节,并且将其转换为Python 3作为unicode会导致问题。
(唯一的问题是b''
语法需要Python 2.6或更高版本,因此使用它会使您与早期版本不兼容。)
答案 1 :(得分:2)
您可能希望通过使用parser
或dis
内置模块解析Python源代码来编写这样的warnging-generator工具。您也可以考虑将这样的功能添加到pylint。
答案 2 :(得分:1)
KennyTM的评论应该作为答案发布:
from __future__ import unicode_literals
这个未来声明可以在Python 2.6和2.7中使用,并启用Python 3的字符串语法,以便前缀字符串文字是Unicode字符串,字节数组需要b
前缀。