Python 仅包含ASCII字符的UNICODE字符串是否始终等于ASCII字符串?
我注意到以下几点:Python 仅包含ASCII字符的UNICODE字符串是否始终等于ASCII字符串?,python,python-2.7,unicode,character-encoding,python-unicode,Python,Python 2.7,Unicode,Character Encoding,Python Unicode,我注意到以下几点: >>> u'abc' == 'abc' True >>> 'abc' == u'abc' True 这是否总是正确的,或者可能取决于系统区域设置? (在Python3中,字符串似乎是unicode的:例如,但在2.x中是字节)Python2在比较这两种类型时,使用ASCII编解码器在unicode和str之间进行强制。所以,是的,这总是正确的 也就是说,除非你搞砸了你的Python安装并用它来改变默认设置。您无法正常执行此操作,因为在启动
>>> u'abc' == 'abc'
True
>>> 'abc' == u'abc'
True
这是否总是正确的,或者可能取决于系统区域设置?
(在Python3中,字符串似乎是unicode的:例如,但在2.x中是字节)Python2在比较这两种类型时,使用ASCII编解码器在
unicode
和str
之间进行强制。所以,是的,这总是正确的
也就是说,除非你搞砸了你的Python安装并用它来改变默认设置。您无法正常执行此操作,因为在启动时会从模块中删除
sys.setdefaultencoding()
函数,但有一个Cargo邪教,人们使用reload(sys)
来恢复该函数,并将默认编码更改为其他编码,以尝试修复隐式编码和解码问题。正是出于这个原因,这样做是愚蠢的。ASCII集中的字符与代码页无关。只有扩展字符(0x80到0xff)可以在不同的语言环境中有所不同。@Phylogenesis:有很多编码不使用ASCII作为基础。sys.setdefaultencoding()
?@techtonik:更改系统默认值会破坏依赖默认值为ASCII的包,更改它只会掩盖代码依赖隐式编码和解码的问题。如果将其设置为Latin-1,则所有字节unicode编码都会神奇地工作,但实际上没有意义;如果将其设置为UTF-8,则所有unicode字节编码都会工作,但可能没有意义,等等。如果腿断了,您实际上是在对腿进行预填充,而不是一开始就避免断腿。我觉得这是个问题。还有更真实/明确的例子吗?@techtonik:我看不出这是一些用户想要维持的一个模糊的副作用。坦率地说,这是对问题过分简化的荒谬做法。请参阅以获取具体示例。@techtonik我不明白为什么当包依赖于某个不能以非黑客方式更改的内容的正常默认值时,您会认为这是一个工作流问题。如果有什么问题的话,你试图绕过它只是为了改变它,这样你就可以得到一个“固定的行为”(针对你的特定问题或工作流),这才是真正的工作流问题。