сравнивая строки на иврите в питоне - PullRequest
2 голосов
/ 04 декабря 2011

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

#coding=utf8  

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

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

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

wm.py: 26: UnicodeWarning: преобразование Unicode равно не удалось преобразовать оба аргумента Unicode - интерпретировать их как неравные, если w == "ה.": Печать (ш)

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

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

Спасибо.

Ответы [ 2 ]

5 голосов
/ 04 декабря 2011

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

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

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

РЕДАКТИРОВАНИЕ: Позвольте мне указать очевидное: переменная w также должна быть строкой Unicode (w = u"...").

2 голосов
/ 04 декабря 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"ה.":
...