UnicodeDecodeError - 读取文件时出错

时间:2015-09-17 01:06:28

标签: python unicode

我在读取具有非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'))

2 个答案:

答案 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())

答案 1 :(得分: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

取决于文件的字节顺序。

还有其他可能的编码可能正在使用中。如果您发布实际的追溯,我们可以更明确地告诉您。