Чтение не-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()