使用python读写中文的时候,编码问题总是让我们这些半路出家的人很是痛苦。博主最近在写两个GUI软件的时候就被编码问题折腾得够呛,因此,特地分享一下在使用python编程过程中的中文编码问题。

书写python脚本的时候,如果你想在程序/脚本中加入中文元素,在脚本顶部加上 #coding=gbk或者# coding=utf8即可解决。如果是想将中文作为参数,则使用u‘中文’将中文编码为unicode。这些不是我们今天讨论的重点,我们想说的是中文读写中的编码问题。

1. 文本文档读取中文

从文本文档中读入中文到内存中的时候,由于python无法处理unicode以外的中文内容(这种说法可能非常不准确甚至不正确),因此必须先将中文内容转换为unicode,使用string.decode('gbk')转换。我考虑过,中文也可能是utf8编码,但是尝试所有文本文档之后发现,他们都是gbk编码的。

2. 数据库(MySQL)存取中文

从数据库(MySQL)中存取数据的时候依然遇到让我痛不欲生的中文编码问题。这里的问题或许要比文本文档中的中文读取要更加复杂。首先,数据库存储数据的时候有数据库自身的编码方式;其次,在与数据库实现数据交流的时候,也有编码方式的指定;第三,最终到python的时候还得编码从unicode。看看这过程就让我觉得,我能弄明白真是个奇迹。

数据库的数据存储方式需要在数据库中设置,就不说了,通常我就首先设置为utf8。主要是从数据库读数据的时候,我始终无法将读入的数据解码为unicode,最后发现,使用mysqldb与数据库创建连接的时候,需要指定编码方式并设置为使用unicode。例:

MySQLdb.connection(host="host ip",user="use",passwd="1234556",port=3306,db="db",use_unicode=True,charset="utf8")

感觉python中文编码的问题我依然没有搞的太懂,因为我写得感觉很混乱。希望有朋友帮我之处错误。