2016-10-24 6 views
0

Я хочу заменить некоторые символы utf-8, заданные другим набором символов utf-8, но все, что я пытаюсь, в конечном итоге с ошибками.Заменить символы utf8

Я нуб на Python, поэтому запаситесь терпением

То, что я хочу достичь, это преобразование символов по юникоды или HTML сущностей (более читаемым, для Maintanance)

Пытается (с примерами) :

1.First

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

#Found this function 
def multiple_replace(dic, text): 
    pattern = "|".join(map(re.escape, dic.keys())) 
    return re.sub(pattern, lambda m: dic[m.group()], text) 

text="Larry Wall is ùm© some text" 
replace_table = { 
    u'\x97' : u'\x82' # ù -> é 
} 
text2=multiple_replace(dic,text) 
print text #Expected:Larry Wall is ém© some text 
      #Got: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal 

2.html лица

dic = { 
    "ú" : "é" # ù -> é 
} 

some_text="Larry Wall is ùm© some text" 
some_text2=some_text.encode('ascii', 'xmlcharrefreplace') 
some_text2=multiple_replace(dic,some_text2) 
print some_text2 
    #Got:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 14: ordinal not in range(128) 

Любые идеи приветствуются

+0

Что означает символ «UTF-8»? –

+0

Я имел в виду символы, такие как ù, Û, ë, ì и т. Д. Или я что-то упускаю? –

+1

это Python2 или 3? – danielfranca

ответ

1

Ваша проблема связана с тем, что ваши входные строки находятся в представлении не-юникод (<type 'str'>, а не <type 'unicode'>). Вы должны определить входную строку, используя u"..." синтаксис:

text=u"Larry Wall is ùm© some text" 
# ^

(Кроме того, вам придется исправить последнее утверждение в первом примере - в настоящее время это print сек строки ввода (text), в то время как я уверен, что вы хотели увидеть результат (text2)).

+0

Ничего себе, проще, чем я думал, спасибо: D –

Смежные вопросы