我在读取具有非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 :(得分: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
取决于文件的字节顺序。
还有其他可能的编码可能正在使用中。如果您发布实际的追溯,我们可以更明确地告诉您。