一. 从SQL server读取数据出现中文乱码
【问题描述】: pymmsql连接SQL Server中文出现乱码
中文乱码
【问题分析】:①、默认情况下SQL Server 使用ISO字符集(代码页1252)(latin1字符集);②、python的 pymssql模块默认以'utf8'编码方式解码(默认charset='utf8'); ③、数据库内的中文,被python以二进制的方式读取后以'utf8'方式解码显示为乱码,其二进制数据未改变。
【解决方案一】:将因'utf8'解码成乱码的str以其原正确的编码方式'latin1'再次encode成正确的bytes然后以'GB2312'编码方式解码成正常的中文str: str.encode('latin1').decode('GB2312')

正常显示
【解决方案二】:最近发现,可以直接以GB18030读取得到正常的中文,我的数据库排序规则排序规则为“Chinese_PRC_CI_AS”

charset=GB18030
- 至于为什么不用GB2312呢,因为包含的字符个数:GB2312 < GBK < GB18030,如果用GB2312,在可能报错:“UnicodeDecodeError: 'gb2312' codec can't decode byte 0xa9 in position 0: illegal multibyte sequence”
二. SQL Server 中文显示为"???"
【问题描述】:SQL Server 2017中新建数据库,用python写入的中文数据显示为"???"

中文显示异常

参看数据库排序规则
【解决方案】:建库的时候选择排序规则“Chinese_PRC_CI_AS”后显示正常,参考SQL SERVER建表时collate Chinese_PRC_CI_AS 是什么意思

选择排序规则
三. PyQt的table中文bug
【问题描述】:Pyqt的table(widget)在未选中Item时直接输入中文,UI界面卡死;
【问题定位】:经排查发现,与table中使用了self.tableWidget.setCellwidget()有关;

四.Matplolib中出现中文乱码
【问题描述】:matplotlib中文轴标签成乱码

轴标签中文乱码
【问题定位】:matplotlib从V2.0后默认字体仅包含西方字母的字形, 没有覆盖中文、韩文或日文。参考Text properties and layout
【解决方案】:可添加代码设置中文字体,也可修改matplotlib配置文件,更改默认字体,这里仅介绍前一种方法,第二种方法请参考:python matplotlib 中文显示参数设置
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['KaiTi','SimHei'] #显示汉字为 楷体, 汉字不支持 粗体,斜体等设置
mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
mpl.rcParams['font.size'] = 10
切记字体设置要在style之后,否则可能依旧出现中文乱码(在下被这个整整坑了一天半的时间),错误代码如下
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['KaiTi','SimHei'] #显示汉字为 楷体, 汉字不支持 粗体,斜体等设置
mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
mpl.rcParams['font.size'] = 10
mpl.style.use('seaborn-whitegrid') # 可能导致字体设置失败
五. windows英文系统显示中文乱码
【问题描述】:英文系统下,部分中文程序运行时出现中文乱码
【问题定位】:中文程序所使用的文字编码与Windows7英文系统的文字编码不同,所以会发生显示乱码的情况
【解决方案】:win7系统参考英文系统中文乱码的解决