Как сравнить юникод и стр в Python
Мой код:
a = '汉'
b = u'汉'
Эти два одинаковых китайских иероглифа. Но очевидно, a == b
является False
, Как это исправить? Обратите внимание, я не могу конвертировать a
в utf-8
потому что у меня нет доступа к коду. Мне нужно конвертировать b
в кодировке, которая a
использует.
Итак, мой вопрос, что мне делать, чтобы включить кодировку b
в это из a
?
3 ответа
Если ты не знаешь a
кодирования, вам нужно:
- обнаружить
a
кодировка - шифровать
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
также доступны, не перепутайте их. См. В чем разница между кодированием / декодированием?