Как сравнить юникод и стр в Python

Мой код:

a = '汉'
b = u'汉'

Эти два одинаковых китайских иероглифа. Но очевидно, a == b является False, Как это исправить? Обратите внимание, я не могу конвертировать a в utf-8 потому что у меня нет доступа к коду. Мне нужно конвертировать b в кодировке, которая a использует.

Итак, мой вопрос, что мне делать, чтобы включить кодировку b в это из a?

3 ответа

Если ты не знаешь a кодирования, вам нужно:

  1. обнаружить a кодировка
  2. шифровать b используя обнаруженную кодировку

Во-первых, чтобы обнаружить a кодируем, давайте использовать chardet.

$ pip install chardet

Теперь давайте использовать это:

>>> import chardet
>>> a = '汉'
>>> chardet.detect(a)
{'confidence': 0.505, 'encoding': 'utf-8'}

Итак, чтобы действительно выполнить то, что вы просили:

>>> encoding = chardet.detect(a)['encoding']
>>> b = u'汉'
>>> b_encoded = b.encode(encoding)
>>> a == b_encoded
True

Декодировать закодированную строку a с помощью str.decode:

>>> a = '汉'
>>> b = u'汉'
>>> a.decode('utf-8') == b
True

ПРИМЕЧАНИЕ Заменить utf-8 в соответствии с кодировкой исходного кода.

И то и другое a.decode а также b.encode ОК:

In [133]: a.decode('utf') == b
Out[133]: True

In [134]: b.encode('utf') == a
Out[134]: True

Обратите внимание, что str.encode а также unicode.decode также доступны, не перепутайте их. См. В чем разница между кодированием / декодированием?

Другие вопросы по тегам