Чтение не-ASCII-символов из текстового файла

Я использую python 2.7. Я пробовал много вещей, таких как кодеки, но не работал. Как я могу это исправить.

myfile.txt

wörd

Мой код

f = open('myfile.txt','r')
for line in f:
    print line
f.close()

Выход

s\xc3\xb6zc\xc3\xbck

Вывод такой же в окне eclipse и командной строки. Я использую Win7. Нет проблем с любыми символами, когда я не читаю из файла.

Ответ 1

  • прежде всего - обнаружение кодировки

  from chardet import detect
  encoding = lambda x: detect(x)['encoding']
  print encoding(line)
  • затем - конвертировать его в unicode или по умолчанию кодировку str:

  n_line=unicode(line,encoding(line),errors='ignore')
  print n_line
  print n_line.encode('utf8')

Ответ 2

import codecs
#open it with utf-8 encoding 
f=codecs.open("myfile.txt","r",encoding='utf-8')
#read the file to unicode string
sfile=f.read()

#check the encoding type
print type(file) #it unicode

#unicode should be encoded to standard string to display it properly
print sfile.encode('utf-8')
#check the type of encoded string

print type(sfile.encode('utf-8'))

Ответ 3

Это терминальная кодировка. Попробуйте настроить терминал с той же кодировкой, которую вы используете в своем файле. Я рекомендую вам использовать UTF-8.

Кстати, это хорошая практика для декодирования-кодирования всех ваших входов-выходов, чтобы избежать проблем:

f = open('test.txt','r')    
for line in f:
    l = unicode(line, encoding='utf-8')# decode the input                                                                                  
    print l.encode('utf-8') # encode the output                                                                                            
f.close()