Apache Superset 是一个开源的数据探索和可视化平台,专门用于创建交互式数据报表和仪表盘。它具有强大的数据集成和可视化能力,广泛用于数据分析和商业智能领域。
Superset详细介绍详见 报表系统之Superset-CSDN博客
各种报表系统的对比请参考 Redash、Superset、DataEase、Metabase、FineBI 和 Power BI 报表系统的优缺点_superset redash metabase-CSDN博客
Superset 导出CSV 默认编码为utf-8,在导出包含中文的文本CSV会有乱码问题。
解决方案如下:
1. 修改 superset/config.py(superset_config.py),将UTF-8修改成GBK或utf-8-sig
# CSV Options: key/value pairs that will be passed as argument to DataFrame.to_csv
# method.
# note: index option should not be overridden
CSV_EXPORT = {"encoding": "utf-8-sig"}
这里建议修改为utf-8-sig。
区别如下:
(1)”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生类似上边的错误。
(2)“uft-8-sig"中sig全拼为 signature 也就是"带有签名的utf-8”, 因此"utf-8-sig"读取带有BOM的"utf-8文件时"会把BOM单独处理,与文本内容隔离开,也是我们期望的结果。
2. 如果是低版本的Superset,例如2.1.3版本,则修改如下代码:
注意:如果是Superset 4.0.1版本,则跳过该步骤。
修改superset/views/core.py
csv = df.to_csv(index=False, **config.get("CSV_EXPORT"))
response = CsvResponse(csv, mimetype="text/csv")
// 把原来的Response替换成CsvResponse
重启服务之后,乱码问题就可以解决。
3. Superset 4.0.1版本做了以上修改,重启服务后,发现无法生效。
还需要将werkzeug降级,在Superset 4.0.1版本中,werkzeug默认是3.0.3版本,需要降级为2.3.8。
pip install Werkzeug==2.3.8
完成后,重启服务,csv导出中文乱码问题得以解决。
如果使用的是docker安装,解决方法是一样的,如果有问题欢迎留言讨论。