2024-09-21 07:30:07 发布
网友
若要在best practices for Unicode in python后面,您应该在所有字符的字符串文本前面加上“u”。有没有可用的工具(最好是PyDev兼容的)在您忘记它时发出警告?在
您可能希望通过使用parser或dis内置模块解析Python源代码来编写这样的警告生成器工具。您还可以考虑向pylint添加这样的功能。在
parser
dis
KennyTM的评论应作为答案发布:
from __future__ import unicode_literals
这个future声明可以在python2.6和2.7中使用,并启用python3的字符串语法,以便未固定的字符串文本是Unicode字符串,而字节数组需要一个b前缀。在
b
you should prefix all string literals with 'u'
不,不是。在
您应该在字符串的文字前面加上u。但并非所有的字符串都是字符串。当您与基于字节的组件(如网络服务或二进制文件)交谈时,您需要使用字节字符串。在
u
想把Unicode字符串写入PNG文件吗?不明智。想要base64解码字符串Y2Fm6Q==?在这里不能合理地使用Unicode字符串,base64是显式的字节。在
Y2Fm6Q==
当然,Python通常允许您在需要字节字符串的地方传递unicode字符串,但只能自动编码为ASCII。如果字符串包含非ASCII字符,您将得到UnicodeError,就像您在需要unicode的地方使用字节一样。“Unicode是对的,字节是错误的”是一个破坏性的神话。这两种类型的字符串都需要操作。在
UnicodeError
如果您担心到Python3的转换,您当然应该将字符串标记为u'',但是您还应该显式地将字节字符串标记为b''。不重要的字符串可以保留为'',并让它们在python3上从字节字符串转换为unicode字符串。在很多情况下,Python2使用字节,而Python3使用Unicode,这是合适的。但是仍然有很多情况下,您确实需要讨论字节,并且将其转换为python3作为unicode将导致问题。在
u''
b''
''
(唯一的问题是b''语法需要Python2.6或更高版本,因此使用它将使您与早期版本不兼容。)
您可能希望通过使用
parser
或dis
内置模块解析Python源代码来编写这样的警告生成器工具。您还可以考虑向pylint添加这样的功能。在KennyTM的评论应作为答案发布:
这个future声明可以在python2.6和2.7中使用,并启用python3的字符串语法,以便未固定的字符串文本是Unicode字符串,而字节数组需要一个
b
前缀。在不,不是。在
您应该在字符串的文字前面加上
u
。但并非所有的字符串都是字符串。当您与基于字节的组件(如网络服务或二进制文件)交谈时,您需要使用字节字符串。在想把Unicode字符串写入PNG文件吗?不明智。想要base64解码字符串
Y2Fm6Q==
?在这里不能合理地使用Unicode字符串,base64是显式的字节。在当然,Python通常允许您在需要字节字符串的地方传递unicode字符串,但只能自动编码为ASCII。如果字符串包含非ASCII字符,您将得到
UnicodeError
,就像您在需要unicode的地方使用字节一样。“Unicode是对的,字节是错误的”是一个破坏性的神话。这两种类型的字符串都需要操作。在如果您担心到Python3的转换,您当然应该将字符串标记为
u''
,但是您还应该显式地将字节字符串标记为b''
。不重要的字符串可以保留为''
,并让它们在python3上从字节字符串转换为unicode字符串。在很多情况下,Python2使用字节,而Python3使用Unicode,这是合适的。但是仍然有很多情况下,您确实需要讨论字节,并且将其转换为python3作为unicode将导致问题。在(唯一的问题是
b''
语法需要Python2.6或更高版本,因此使用它将使您与早期版本不兼容。)相关问题 更多 >
编程相关推荐