今天在使用python的Pillow库和matplotlib库时,遇到了一些中文乱码问题,在此整理一下,避免遗忘。
我是在windows平台下使用的,个人觉得windows平台出编码问题比Ubuntu要多一些,可能是因为windows是用GBK编码的,而Linux使用unicode编码的原因。
在使用Pillow画树状图时,输出乱码的源代码是这样的:
from PIL import Image,ImageDraw,ImageFont
draw.text((x+5,y-7),labels[clust.id],(0,0,0))
最开始报错:
latin-1' codec can't encode characters in position 9-13: ordinal not in range(256)
解决办法是加上encode:
draw.text((x+5,y-7),labels[clust.id].encode('utf-8'),(0,0,0),font=font1)
但是输出变成了拉丁文:
后来上网查找,发现有一个更简单的方法,加一行这个
font1 = ImageFont.truetype('simsun.ttc', 24)
上面那句改成
draw.text((x+5,y-7),labels[clust.id],(0,0,0),font=font1)
就变成了:
成功!
在使用matplotlib画饼状图时,又遇到了中文乱码的问题:
听从网上的建议,选择了一个一劳永逸的方法,修改了matplotlib的配置文件
matplotlinrc
将其中
#font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
的注释去掉,同时为了使负号正常显示
将#axes.unicode_minus : True # use unicode for the minus symbol
的True改为False
这样,就OK了
后记:为什么写出来感觉是很简单的事情,但是实际上我上网搜索了一个多小时来解决这两个问题来着....