Python - Unicode - PullRequest
       4

Python - Unicode

0 голосов
/ 08 марта 2012

Выполнение простого сценария идет не так, как задумано.

notAllowed = {"â":"a", "à":"a", "é":"e", "è":"e", "ê":"e",
              "î":"i", "ô":"o", "ç":"c", "û":"u"}

word = "dôzerté"
print word

for char in word:
    if char in notAllowed.keys():
        print "hooray"
        word = word.replace(char, notAllowed[char])


print word
print "finished"

Выходные данные возвращают слово без изменений, хотя оно должно было изменить "ô" и "é" на o и e, возвращая, таким образом, dozerte ...

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Итерация строки перебирает ее байты, а не обязательно символы.Если кодировка вашего исходного файла python - utf-8, len(word) будет иметь 9 из 7 (оба специальных символа имеют двухбайтовую кодировку).Повторение строки Unicode (u"dôzerté") выполняет итерацию символов, поэтому это должно работать.

Могу ли я также предложить вам использовать unidecode для задачи, которую вы пытаетесь достичь?

2 голосов
/ 08 марта 2012

Как насчет:

# -*- coding: utf-8 -*-
notAllowed = {u"â":u"a", u"à":u"a", u"é":u"e", u"è":u"e", u"ê":u"e",
          u"î":u"i", u"ô":u"o", u"ç":u"c", u"û":u"u"}

word = u"dôzerté"
print word

for char in word:
if char in notAllowed.keys():
    print "hooray"
    word = word.replace(char, notAllowed[char])


print word
print "finished"

Как правило, если вы хотите присвоить строку Unicode какой-то переменной, вам нужно использовать:

u"..." 
#instead of just
"..."

для обозначения того факта, что это строка Unicode.

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