在Pillow和matplotlib中遇到的一些中文乱码问题

来源:互联网 发布:类似维棠软件 编辑:程序博客网 时间:2024/06/11 18:54

今天在使用python的Pillow库和matplotlib库时,遇到了一些中文乱码问题,在此整理一下,避免遗忘。

我是在windows平台下使用的,个人觉得windows平台出编码问题比Ubuntu要多一些,可能是因为windows是用GBK编码的,而Linux使用unicode编码的原因。


在使用Pillow画树状图时,输出乱码的源代码是这样的:

from PIL import Image,ImageDraw,ImageFontdraw.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了



后记:为什么写出来感觉是很简单的事情,但是实际上我上网搜索了一个多小时来解决这两个问题来着....




0 0