python一直对中文支持的不好,最近老遇到编码问题,而且几乎没有通用的方案来解决这个问题,但是对常见的方法都试过之后,发现还是可以解决的,下面总结了常用的支持中文的编码问题(这些方法中可能其中一个就能解决问题,也可能是多个组合)。
(1)、首先,要保证文件的开头要加上编码设置来说明文件的编码
复制代码 代码如下:
#encoding=utf-8
(2)、然后,在连接数据的连接参数里加上字符集说明查询出的结果的编码,这个不加的后果可能是查询出的汉字字符都是问号
复制代码 代码如下:
conn=pymssql.connect(server=\’.\’,user=\’\’, password=\’\’,database=\’MyTest\’,charset=\’utf8\’)
(3)、设置python系统的默认编码(对于文件来说,这招几乎屡试不爽,呵呵~~)
复制代码 代码如下:
import sys
reload(sys)
sys.setdefaultencoding(\’utf8\’)
注意:上述编码是“utf8”,而不是“utf-8”,我也没弄明白,大部分情况下,这个无所谓的,但是这里我试了必须要是“utf8”
一个简单的完整的python连接mssqlserver的例子如下(得安装pymssql包):
复制代码 代码如下:
#encoding:utf8
import sys
reload(sys)
sys.setdefaultencoding(\’utf8\’)
import pymssql
try:
conn=pymssql.connect(server=\’.\’,user=\’\’, password=\’\’,database=\’MyTest\’,charset=\’utf8\’)
sql=\”select * from UserInfo\”
cur=conn.cursor()
cur.execute(sql)
data=cur.fetchall()
conn.close()
print data
except Exception,e:
print e
运行结果如下:
复制代码 代码如下:
[(u\’20093501\’, u\’\\xb9\\xf9\\xbe\\xb8\’, u\’\\u7537 \’, 35, u\’\\xb4\\xf3\\xcf\\xc0\’),
(u\’20093502\’, u\’\\xbb\\xc6\\xc8\\xd8\’, u\’\\u5973 \’, 34, u\’\\xc3\\xc0\\xc5\\xae\’),
(u\’20093503\’, u\’\\xc1\\xee\\xba\\xfc\\xb3\\xe5\’, u\’\\u7537 \’, 25, u\’2B\\xc7\\xe0\\xc4\\xea\’),
(u\’20093504\’, u\’\\xc8\\xce\\xd3\\xaf\\xd3\\xaf\’, u\’\\u5973 \’, 24, u\’\\xc6\\xaf\\xc1\\xc1\’)]
[Finished in 0.2s]
虽然摆脱了问号和乱码的困扰,但这仍不是我们想要的结果,但这个确实是正确的,因为结果是utf8编码。这个现象确实诡异,请教了许多高手,得知,最好的结果就是逐个字段查询,才能显示中文,整个查询的话,会以utf8的格式显示出来。
上述代码中第14行data是整个查询的结果,如果指定某个具体的字段,如print data[0][2](表示取查询结果的第一行第三列的字段的值),则会输出中文。
其实不仅仅是mssqlserver数据库,mysql(需下载MySQLdb包)、sqllite(python自带的文件数据库)、mongodb(需下载PyMongo包)等或者是普通文本文件也是类似的解决方案。