сравнение строк на иврите в python

Я пишу небольшую заметку, которая даст мне некоторые обновления с веб-сайта израильской кабельной компании, написанного на иврите (html). На веб-странице используется аббревиатура, которую я хочу заменить на полное слово. Я поместил строку в начало моего файла python

#coding=utf8  

и строчка в коде

if w = "ה.": print (w)  

но получаю предупреждение:

wm.py:26: UnicodeWarning: при сравнении эквивалентности Unicode не удалось преобразовать оба аргумента в Unicode — они интерпретируются как неравные, если w == "ה.": print (w)

Поэтому я попытался поместить аббревиатуру в файл и загрузить их оттуда, но ключи загружаются как \xd7\x94.', а не как буквы иврита (и сравнение не выполняется)

Итак, как я могу сравнить строки?

Спасибо.


person Yotam    schedule 03.12.2011    source источник


Ответы (2)


Вы должны пометить его как строку Unicode:

if w == u"ה.": print (w)

Это сработает сейчас.

EDIT: Позвольте мне констатировать очевидное: переменная w также должна быть строкой Unicode (w = u"...").

person juliomalegria    schedule 03.12.2011

Это поможет опубликовать полный пример, иллюстрирующий проблему, вместе с версией Python, которую вы используете. Например, print(w) обычно подразумевает Python 3, но работает и в Python 2.

Я воспроизвел вашу ошибку со следующим кодом на Python 2.7. Обратите внимание, что в строке coding указывается кодировка исходного файла, поэтому файл необходимо сохранить в кодировке UTF-8 в редакторе, который ее поддерживает.

#coding=utf8  
w = u'ה.'
if w == "ה.":
    print (w)

Результат:

C:\y.py:3: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  if w == "ה.":

Проблема возникает при сравнении строк Unicode со строками байтов. Python пытается преобразовать строку байтов в строку Unicode, используя кодек «ascii» по умолчанию, строка байтов фактически закодирована в UTF-8 в соответствии с исходной кодировкой. Всегда сравнивайте строки Unicode со строками Unicode и байтовые строки с байтовыми строками:

Чтобы исправить, пометьте строку как Unicode:

if w == u"ה.":
person Mark Tolonen    schedule 04.12.2011