在Spyder中用pdfkit与wkhtmltopdf转土耳其HTML为PDF遇编码问题
问题:Spyder中pdfkit转换土耳其语HTML到PDF出现编码异常,Jupyter环境正常
同一Python环境下,使用pdfkit调用wkhtmltopdf转换含土耳其语特殊字符的HTML文件为PDF时,Spyder输出的PDF存在编码乱码/特殊字符显示异常,但在Jupyter Notebook中运行完全相同的代码,转换结果正常。
已完成的排查操作:
- Spyder中已全局设置UTF-8编码(包括控制台、文件编码等选项)
- HTML文件头部包含
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">标签 - HTML中指定了支持土耳其语的字体(如
font-family: 'Arial', 'Helvetica', sans-serif;)
相关代码示例
import pdfkit # 配置wkhtmltopdf路径(若未加入系统环境变量) config = pdfkit.configuration(wkhtmltopdf=r'C:\path\to\wkhtmltopdf.exe') # 转换本地HTML文件 pdfkit.from_file('turkish_content.html', 'output.pdf', configuration=config) # 或直接传入HTML字符串 html_content = """ <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style> body { font-family: 'Arial', sans-serif; } </style> </head> <body> <p>土耳其语测试:Merhaba dünya! Şş Ğğ İı Öö Üü Çç</p> </body> </html> """ pdfkit.from_string(html_content, 'output_string.pdf', configuration=config)
可行解决办法
1. 给pdfkit显式指定UTF-8编码参数
调用pdfkit时,通过options参数强制让wkhtmltopdf以UTF-8解析内容:
options = { 'encoding': 'UTF-8', 'no-outline': None } pdfkit.from_file('turkish_content.html', 'output.pdf', configuration=config, options=options)
2. 手动设置Spyder运行环境的编码变量
Spyder的控制台环境变量可能未正确继承UTF-8,在代码开头添加环境变量配置:
import os os.environ['LANG'] = 'tr_TR.UTF-8' os.environ['LC_ALL'] = 'tr_TR.UTF-8' import pdfkit # 后续转换代码...
3. 直接传递wkhtmltopdf的字符集命令行参数
若上述方法无效,通过options直接给wkhtmltopdf指定字符集参数:
options = { 'charset': 'utf-8', 'encoding': 'utf-8' } pdfkit.from_file('turkish_content.html', 'output.pdf', configuration=config, options=options)
4. 确认HTML文件实际保存为UTF-8编码
即使头部有meta标签,若HTML文件本身以其他编码(如ANSI)保存,仍会导致异常。右键HTML文件→用记事本打开→另存为,确认编码选择UTF-8。
5. 强制指定土耳其语支持的本地字体
若字体加载异常,在CSS中直接指定本地字体路径:
body { font-family: 'Arial Unicode MS', sans-serif; /* 或直接引用本地字体文件 */ font-family: url('C:/Windows/Fonts/arial.ttf'); }
内容的提问来源于stack exchange,提问作者Selchuk Hadzhaahmed
相关产品推荐
相关产品推荐

