Python, я не могу сохранить специальные символы, такие как θæŋ после выполнения поиска re - PullRequest
2 голосов
/ 22 ноября 2011

Я не могу сохранить специальные символы, такие как θæŋ после создания re.search.

Я сохраняю текстовое поле модели Django. на странице администратора вместо θæŋkfəli я получаю

\xce\xb8\xc3\xa6\xc5\x8bkf\xc9\x99li

Это ошибка re.search? Это ошибка Админа? Я экономлю неправильно?

Как найти нужную часть строки и сохранить ее в текстовом поле модели с символами θæŋ?

lines='title="Listen to audio" /></a><span class="pr">/<span class="unicode">ˈ</span>θæŋkfəli/</span> <span class="fl">adverb' #the string which i wan to save exactly as it is, Django saves it correctly

liness=smart_str(lines, encoding='utf-8', strings_only=False, errors='replace') # saves correctly
linesu=smart_unicode(lines, encoding='utf-8', strings_only=False, errors='replace')  # saves correctly

После попытки поиска части строки θæŋkfəli Django не сохраняет ее в необходимых специальных символах. Вместо θæŋkfəli я получаю "\ xce \ xb8 \ xc3 \ xa6 \ xc5 \ x8bkf \ xc9 \ x99li"

stryc=re.compile('<span\s*class=\"pr\">\s*/\s*<span\s*class="unicode\">(?P<Pronun>.*)<span\s*class=\"fl\">', re.DOTALL)
                    #\s+/\s+<span class=\"unicode\">\s+[\\a-zA-Z0-9\s]+/\s+</span> '
strys=re.search(stryc, linesu)

Pronun=stryWordcs.groups('Pronun')
text=Pronun.encode('utf-8') # does not covert unicode to letters
Pronun=smart_str(Pronun, encoding='utf-8', strings_only=False, errors='replace') # also does not covert unicode to letters
a=Pronunciation(field=Pronun) # or field=text
a.save()
# Pronun=  "θæŋkfəli", nevertheless it is saved as  \xce\xb8\xc3\xa6\xc5\x8bkf\xc9\x99li or in unicode

если я не использую smart_str, я получаю "\ u03b8 \ xe6 \ u014bkf \ u0259li"

если я пытаюсь искать в строках или воровстве, я не могу найти θæŋkfəli из-за специального символа ˈ (маленькая ручка сверху = \ xcb \ x88 = \ u02c8)

С уважением, Gintare

1 Ответ

1 голос
/ 22 ноября 2011

Когда вы видите "\xce\xb8\xc3\xa6\xc5\x8bkf\xc9\x99li, то, что вы видите, фактически совпадает с θæŋkfəli, но в шестнадцатеричной записи. Точно так же вы можете представлять тот же набор символов, что и

U+03B8 U+00E6 U+014BkfU+0259li

Это потому, что текст хранится в виде строки Unicode. Чтобы увидеть, что это на самом деле то же самое, попробуйте скопировать текст (со специальными символами) в верхнее поле на этом сайте конверсии и нажмите на команду convert. Python способен обрабатывать юникод , но в зависимости от того, что вы используете для отображения символов, он будет выглядеть по-разному.

Я не совсем уверен, какой у вас вопрос. Если вас беспокоит, что ваше регулярное выражение способно точно соответствовать символам Юникода, модуль re Python имеет опцию , чтобы заставить его работать иначе с Unicode .

Если вы беспокоитесь о том, как отображается этот текст, это будет зависеть от того, как вы пытаетесь его отобразить, и вам нужно быть более конкретным в отношении вашей проблемы.

Я могу заверить вас, что Django прекрасно хранит вашу строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...