如何使用 openpyxl 保存 xlsx 并获得正确的编码? 【垃圾人物】

Posted

技术标签:

【中文标题】如何使用 openpyxl 保存 xlsx 并获得正确的编码? 【垃圾人物】【英文标题】:How to save an xlsx with openpyxl and get right encoding? [trash characters] 【发布时间】:2019-04-09 08:27:04 【问题描述】:

我从 mysql DB 获取结果并使用 openpyxl 库将数据保存到 XLSX。保存并打开文件后,我所有的名字都带有任何充满坏字符的特殊字符。我相信这是一些编码问题,但是我在打开或保存工作簿时找不到设置编码的方法。

我已经尝试过使用:

wb =Workbook(encoding='utf8')


然后我收到一个关于意外关键字参数的错误,我不知道我还能尝试什么。

处理将查询结果数据写入excel的部分代码在这里:

wb = Workbook()
ws = wb.create_sheet(0)
ws.append(res.keys())
x = res.fetchall()
xlength = len(x)
ylength = len(x[0])
for i in range(xlength):
    for k in range(ylength):
        ws.cell(row=(i+2), column=(k+1)).value = x[i][k]    
wb.save('Documents/python pigu_lt/reports/cache/'.format(query_type) + ".xlsx")

我的实际结果是:

'Vaikams ir kūdikiams'

而我的预期结果是:

'Vaikams ir kūdikiams'

有谁知道如何解决这个问题?

【问题讨论】:

【参考方案1】:

这与 openpyxl 无关,而与 MySQL 以及如何连接它有关。 XLSX 以默认为 UTF8 的 XML 存储数据,因此能够表示所有 unicode 字符。您应该检查数据库的设置并确保它返回 unicode 或 utf8。

【讨论】:

我同意。 Å« 是字节 0xc5 0xab 的 iso-8859-1 解码,这是 UTF-8 编码 ū 的方式。因此,数据库连接可能设置为 iso-8859-1 或类似的(或者更糟糕的是,数据在存储到数据库之前就被破坏了)。另请注意,MySQL 的“utf8”实际上不是 utf8(它只处理基本多语言窗格,您需要 utf8mb4)。 是的,一些 utf8 -> latin-1 废话可能在数据到达 openpyxl 之前发生。大概驱动程序默认为 Latin1。我们多久看到一次?直到今天,我才得到一个生成的 PDF,其中包含 utf8 - latin1 乱七八糟的内容。

以上是关于如何使用 openpyxl 保存 xlsx 并获得正确的编码? 【垃圾人物】的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何打开多页 .xlsx 文件(带格式)并编辑一些单元格并将其另存为另一个 .xlsx 文件

Openpyxl - 如何在xlsx中查找包含数据的行数

将多个 openpyxl xlsx 工作簿合并为一个 .zip 文件以供下载

python操作excel (openpyxl)

使用 OpenPyXL 读取提取的 XLSX 文件

python+openpyxl的excel的相关读写