Python读取含波兰语CSV生成HTML报告的编码错误求助
解决CSV读取与HTML生成的编码冲突问题
问题根源
你的CSV文件采用ISO-8859-2编码(波兰语常用编码),但HTML标准推荐使用UTF-8编码,两者不匹配导致读取、写入时出现编码错误,以及浏览器渲染乱码。
分步解决方案
正确读取CSV文件
明确指定CSV的编码为ISO-8859-2,确保pandas正确解析波兰语特殊字符:df = pd.read_csv("Średnie wyniki oceny użytkowości rozpłodowej loch dla rasy puławskiej.csv", sep=";", encoding="ISO-8859-2")生成UTF-8编码的HTML内容
在HTML头部添加meta标签指定字符编码为UTF-8,同时让df.to_html()生成UTF-8格式的表格内容:html = f""" <HTML lang="pl"> <head> <meta charset="UTF-8"> <title>some title</title> </head> <style type="text/css"> some style </style> <body> some text {df.to_html(index=False, encoding='UTF-8')} some text </body> </html> """这里的
encoding='UTF-8'参数会让pandas把表格内容转换为UTF-8编码的字符串,避免后续写入时的编码冲突。以UTF-8编码写入HTML文件
打开文件时明确指定编码为utf-8,确保整个HTML文件以UTF-8格式保存:with open('report.html', 'w', encoding='utf-8') as f: f.write(html)给文件名加上
.html后缀,方便浏览器直接识别并正确渲染。
为什么之前的尝试失败?
- 写入用UTF-8但乱码:因为HTML头部没有指定
charset="UTF-8",浏览器默认用系统编码(如Windows-1250)解析UTF-8文件,导致乱码。 - 写入用ISO-8859-2表格乱码:
df.to_html()默认生成Unicode字符串,其中可能包含ISO-8859-2不支持的字符(比如\x8c),导致编码失败;同时浏览器若用UTF-8解析ISO-8859-2文件,也会出现乱码。
内容的提问来源于stack exchange,提问作者mlodycezar
相关产品推荐
相关产品推荐

