Python 转换为 ISO-8859-5
我在尝试把一个包含俄文字符的UTF-8文件转换成ISO-8859-5格式时遇到了问题:'charmap' 编码无法在位置0编码字符u'\ufeff'。有没有人知道这是什么问题吗?以下是相关内容:
def convert():
try:
import codecs
data = codecs.open('in.txt', 'r', 'utf-8').read()
except Exception, e:
print e
sys.exit(1)
f = open('out.txt', 'w')
try:
f.write(data.encode('iso-8859-5'))
except Exception, e:
print e
finally:
f.close()
"in.txt": ё!—№%«»(эюпоиуыяафйклж;нцхз
2 个回答
2
最近版本的Python有一个叫做utf-8-sig
的编码方式,它在读取UTF-8编码的字符串或文件时,会自动去掉开头的BOM(字节顺序标记)。
>>> print '\xef\xbb\xbf\xe3\x81\x82'.decode('utf-8-sig')
あ
2
feff是一个叫做字节顺序标记(Byte-Order-Mark)的字符。ISO-8859-5这个编码格式里是没有这个字符的。
在把你的data
变量转换成ISO-8859-5编码之前,你需要把这个字符去掉。