python整理二十六——字符编码漫游

在python2.x中字符编码是个头疼的问题,不过之前早就解决了,今天无意浏览网页时看到,有很有pythoner在问python编码的问题,索性,写一写编码问题,记录至此:

 

先看代码,边看边解释

#coding=utf-8 import sys print sys.getdefaultencoding() # --> ascii u1 = '中国' print type(u1), repr(u1) # --> <type 'str'> '/xe4/xb8/xad/xe5/x9b/xbd' u2 = u'中国2009' print type(u2), repr(u2) # --> <type 'unicode'> u'/u4e2d/u56fd2009' # str --> unicode print print '# str --> unicode' u1_1 = u1.decode('utf8') print type(u1_1), repr(u1_1) # --> <type 'unicode'> u'/u4e2d/u56fd' u1_2 = unicode(u1, 'utf8') print type(u1_2), repr(u1_2) # --> <type 'unicode'> u'/u4e2d/u56fd' # unicode --> str print print '# unicode --> str' u2_1 = u2.encode('utf8') print type(u2_1), repr(u2_1) # --> <type 'str'> '/xe4/xb8/xad/xe5/x9b/xbd2009' u2_2 = u2.encode('gbk') print type(u2_2), repr(u2_2) # --> <type 'str'> '/xd6/xd0/xb9/xfa2009' u2_3 = u2.encode('gb2312') print type(u2_3), repr(u2_3) # --> <type 'str'> '/xd6/xd0/xb9/xfa2009'

 

代码中第一行#coding=utf8,是用来指定当前文件中编码,如果不指定就用系统默认编码,就是用

sys.getdefaultencoding() 看到的编码

 

代码中,左边是程序,右边是输入,对照着看,应该很容易看明白

 

记住下面两点:

1. 程序中字符串开头用u标记,即全部用unicode,否则在字符串相加的时候,中文字符很可能出问题

2. sql语句不用u标记,传入的参数用u标记,否则,数据库查询也会出莫名其妙的问题,如

   sql = 'select * from test where name=%s limit 1'

   params = (u'中国', )

   cursor.execute(sql, params)

你可能感兴趣的:(sql,数据库,python,import)