Будет ли строка UNICODE, содержащая только символы ASCII, всегда равна строке ASCII?

Я заметил, что выполнено следующее:

>>> u'abc' == 'abc'
True
>>> 'abc' == u'abc'
True

Будет ли это всегда быть правдой или, возможно, это зависит от языковой системы? (Кажется, строки являются unicode в python 3: например этот вопрос, но байты в 2.x)

Ответ 1

Python 2 принуждает между unicode и str использовать кодек ASCII при сравнении двух типов. Так что да, это всегда так.

То есть, если вы не испортили установку Python и не использовали sys.setdefaultencoding(), чтобы изменить это значение по умолчанию. Вы не можете сделать это нормально, потому что функция sys.setdefaultencoding() удаляется из модуля во время запуска, но существует Cargo Cult, где люди используют reload(sys) для восстановления этой функции и изменения кодировки по умолчанию для чего-то еще попытаться исправить неявные проблемы кодирования и декодирования. Это глупая вещь по этой причине.