2015-09-17 4 views
1

Я получаю UnicodeDecodeError при чтении файла с символами, отличными от ascii. Ниже приведен фрагмент кодаUnicodeDecodeError - Ошибка при чтении файла

import codecs 
import locale 

print locale.getpreferredencoding() 

fname = "c:\\testing\nonascii.txt" 
f=codecs.open(fname,"r",encoding='utf-8') 
sfile=f.read() 


print type(file) #it's unicode 


print sfile.encode('utf-8') 


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

дайте нам первые несколько строк 'nonascii.txt'. –

+0

Также сообщите нам об ошибке и получите ошибку. –

ответ

1

Судя по имени файла, вы используете Windows. Файлы в Windows будут не кодироваться в кодировке UTF-8, если вы не проявите особой осторожности, чтобы сохранить их таким образом; по умолчанию они будут использовать ваш code page.

Если вы не знаете, какую кодовую страницу используете Windows, вы можете использовать специальную кодировку mbcs, чтобы получить то, что она использует по умолчанию. Если вы хотите, чтобы ваша программа работала в других системах, кроме Windows, вы можете использовать sys.getfilesystemencoding(), чтобы получить значение, которое должно работать с текущей системой; в Windows он вернется mbcs.

import sys 
f=codecs.open(fname,"r",encoding=sys.getfilesystemencoding()) 
0

Ваш файл на самом деле не UTF-8.

Возможно, это UTF-16 with a Byte Order Mark. Если это проблема, ваша ошибка будет один из:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xfe in position 0: invalid start byte 

или

UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte 

в зависимости от порядок байтов файла.

Существуют и другие возможные кодировки, которые могут быть использованы. Если вы разместите фактическую трассировку, мы сможем сказать более определенно.

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