编码错误 - xlsxwriter - Python

2 投票
1 回答
3084 浏览
提问于 2025-04-18 18:50

我正在尝试从一个文件中分割出每一行,并把它们放到一个Excel文件(xlsx)里。根据PS PAD的显示,这个文件的编码是'cp1250'。所以为了在xlsx文件中显示正确的字符,我把这些行从cp1250解码 - line = line.decode("cp1250")

问题是大约3000行从12000行中返回了这个错误:

'charmap' codec can't decode byte 0x81 in position 25: character maps to <undefined>

接下来我尝试用解码方式“utf-8”,不知道为什么,这样效果更好。只有330行返回了错误:

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

你们有没有想过我哪里做错了?

补充说明:错误大多发生在行中包含'Ž'或'S'时

这是代码:(在py文件的顶部我写了"# -- coding: utf-8 --")

def toXls(file):
workbook = xlsxwriter.Workbook(file)
worksheet = workbook.add_worksheet()
a=0
with open("filtrovane.txt") as f:
    x=0
    for line in f:

        try:
            line = line[:-1].decode("utf-8") """It should be "cp1250" according to PSPAD editor"""
            # line = line.encode("ISO 8859-2")
            splitted = line.split("::")

            if len(splitted)==7:
                try:
                    a=a+1
                    worksheet.write(a,0,splitted[0])
                    worksheet.write(a,1,splitted[1])
                    worksheet.write(a,2,splitted[2])
                    worksheet.write(a,3,splitted[3])
                    worksheet.write(a,4,splitted[4])
                    worksheet.write(a,5,splitted[5])
                    worksheet.write(a,6,splitted[6])
                except Exception as e:
                    print "!!"+line+" "+a + e
        except Exception as e:
            print e
            x=x+1
print x
workbook.close()

1 个回答

0

XlsxWriter的文档和代码库里有两个例子,展示了如何读取UTF-8Shift JIS格式的文件,并把它们转换成xlsx格式的文件。

对于cp1250格式,应该也能用同样的方法。

撰写回答