Python 转换为 ISO-8859-5

3 投票
2 回答
2164 浏览
提问于 2025-04-15 18:51

我在尝试把一个包含俄文字符的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编码之前,你需要把这个字符去掉。

撰写回答