只包含ASCII字符的UNICODE字符串是否总是等于ASCII字符串?

doc*_*ove 17 python unicode character-encoding python-2.7 python-unicode

我注意到以下情况:

>>> u'abc' == 'abc'
True
>>> 'abc' == u'abc'
True
Run Code Online (Sandbox Code Playgroud)

这总是正确的还是可能取决于系统区域设置?(似乎字符串在python 3中是unicode:例如这个问题,但2.x中的字节)

Mar*_*ers 14

在比较两种类型时,Python 2 在ASCII编解码器之间强制使用unicodestr使用ASCII编解码器.所以是的,这总是如此.

也就是说,除非你弄乱你的Python安装并使用它sys.setdefaultencoding()来改变那个默认值.你不能这样做,因为sys.setdefaultencoding()函数在启动时从模块中删除,但有一个Cargo Cult四处走动,人们用它reload(sys)来恢复该功能并将默认编码更改为其他东西以尝试修复隐式编码和解码问题.正是出于这个原因,这是一件愚蠢的事情.

  • @techtonik:我没有看到这是一些用户想要维护的模糊副作用.坦率地说,这是一个荒谬的过度简化问题.有关具体示例,请参见[sys.setdefaultencoding('utf-8')的危险](/sf/answers/2069322321/). (2认同)
  • @techtonik我不明白为什么你认为这是一个工作流问题,当包依赖于无法以非hackish方式改变的某些东西的理智默认值.如果有的话,你试图绕过它只是为了改变它,以便你得到一个"固定行为"(对于你的特定问题或工作流程)是真正的工作流问题. (2认同)