经过2天的折腾,还有百度了各个网站论坛对于这一问题大家的解决办法。发现大家的回答缺了一个必要条件,或是写了但没有重点提及这个。导致中文乱码问题一直无法解决!原有大家的解决思路都是编码上。没有重点提及注册字体。在此我整理我的解决方法。希望对有此类问题的同学有帮助!
这个问题的正确解决思路如下
1) 对于读取文件需要正确编码。
正确解决的结果是 Python 可以正确解析到这个字符。
常用的编码: utf-8,gbk,gb2312,gb18030。
注意:生成pdf文件需要是字符。读取文件最好是用2进制方式读取。再用相应编码解码!
如果遇到如下错误提示:更换编码即可!
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 2: inva
可以更换编码:
a=b.decode( your_encoder ) 更换 your_encoder 即可!
而读文件如果个人无法确定文件编码。可以通过chardet 模块detect方法检测文本的编码。
2)生成pdf并显示中文的代码需要注册字体!
这一步非常关键。如果这一步无法实现。就无法解决中文乱码的问题。
关于windows系统的字体。放置路径一般是 c:\windows\fonts\目录。
可以选择对应的字体。
具体示例如下:
from reportlab.pdfbase import pdfmetrics,ttfonts
pdfmetrics.registerFont (reportlab.pdfbase.ttfonts.TTFont ('song', 'C:/Windows/Fonts/simfang.ttf')) # 注册字体
c = canvas.Canvas(output) #实例化canvas
c.setFont ('song', 10) # 设置字体及大小