2015-08-15 3 views
0
string1=" म नेपाली हुँ" 
string1=string1.split() 
string1[0] 
'\xe0\xa4\xae' 

with codecs.open('nepaliwords.txt','r','utf-8') as f: 
    for line in f: 
      if string1[0] in line: 
        print "matched string found in file" 

Traceback (most recent call last): File "", line 3, in UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)решение сравнения ввода юникода строки в файл с данными Юникода

В текстовых файлах, у меня есть большое количество непальского юникода.

Я делаю что-то неправильно здесь, сравнивая две строки юникода?

Как распечатать строку согласованного юникода?

ответ

3

Ваш string1 является байтовой строкой, закодированной в UTF-8. Это не строка Юникод. Но вы использовали codecs.open(), чтобы Python декодировал содержимое файла до unicode. Попытка затем использовать вашу байтовую строку с тестом сдерживания заставляет Python неявно декодировать байтовую строку до unicode для соответствия типам. Это не работает, поскольку неявное декодирование использует ASCII.

Декодирования string1 к первому unicode:

string1 = " म नेपाली हुँ" 
string1 = string1.decode('utf8').split()[0] 

или использовать Юникод строки символы А вместо:

string1 = u" म नेपाली हुँ" 
string1 = string1.split()[0] 

Обратите внимание на u на старте.

+0

спасибо string1 = u "म नेपाली हुँ" решил мой случай. для string1 = string1.split() [0] возникла проблема с [0] .. спасибо –

+0

вы тоже могли бы мне помочь в печати совпадающей строки. –

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