Linux认证web.py连接mysql中文显示问题
) `2 s" g! `% x% A3 a) c7 Eweb.py连接mysql的中文显示问题
3 y E+ k9 z" C" s( f近几天研究使用python写一个管理程序,需要使用web.py,但在使用和显示中文时总是出错,查了一些资料,终于搞清楚了。
5 u, `3 e( O( p" H4 b6 \首先,要了解一些基本的知识。python的字符串分为两种,一种是str,一种是unicode,他们之前可以互相转换的。str转unicode,使用decode函数,反之使用encode函数。看个具体的例子:
9 I5 n7 v/ p% H' n( L6 ~1 cstr1=‘你好’ #这时str1为str类型,因为我是在中文windows下运行,所以使用默认的gbk编码- ?& `- M% H& f, N: ]
str2=str1.decode(‘gbk’) #这时str2为unicode,注意我们是使用的gbk进行解码,其实在中文windows下系统默认编码为gbk,所以我们也可以不输入参数+ X, A+ f. o' R R& ^
str3=str2.encode(‘utf-8’)#这时str3为str类型,但编码为utf-8,这时我们不可以直接print,否则会为乱码,这很容易理解,因为我们在中文windows下,只能打印gbk编码的中文
1 I+ i3 G/ k: {1 H& q1 _, F* O好接下来让我们来看看如何把中文插入到mysql数据库,最好能统一编码,这里为了方便,我统一使用utf-8./ n4 T& v. E2 F1 I
先建立表,注意把表的默认编码改为utf8(也可以直接把数据库的默认编码改为utf8,这里就不多说了; Z% }) h S/ ?- }3 s8 L3 q
CREATE TABLE `network` (/ X9 o- x9 X) r W
`id` int(11) NOT NULL auto_increment,
t- z( _4 q0 ?( g1 v7 C% Y4 `, |3 F`net_str` varchar(45) NOT NULL,
3 }* E- R1 X, P4 g1 m`flag` varchar(10) default NULL,3 \% Q4 Q: z, |( E+ G. q Z
` `descript` text,
8 [/ A6 B, j5 t% VPRIMARY KEY (`id`),
5 ?! x' c9 B s4 V) ENGINE=MyISAM DEFAULT CHARSET=utf8 |" g" f5 q2 g* K& R2 M0 M0 @ V
连接数据库代码:! p& H/ T4 @! H2 U7 T# n
conn = MySQLdb.connect (host = “1.1.1.1”,user = “qh”,passwd = “yourpass”,db = “yourdatabase”,charset=‘utf8’)% c" y( O* p" a6 _. |
在插入数据时一定要称转化,把gbk的中文转为utf8的然后再插入到mysql(因为我的数据都是在windows下编辑的,所以文件的中文默认都是以gbk编码的,当然你也可以,使用文本编辑器直接把文件另存为utf-8格式)
! @& |# n# B6 L( u' k; \2 Ustr1=str2.decode(‘gbk’)#str2是我从文件文件里直接读出的数据,现在str1是unicode了
! z8 U( `0 Z: z3 j- |& S( Fstr3=str1.encode(‘utf-8’)#这时str3为str类型了,可以使用insert直接加入到mysql数据了
' U# [! ?% H4 ~. V% C在web.py上取数) n; i9 T R( ^
db1 = web.database(dbn=‘mysql’, host = “1.1.1.1”,user = “qh”,passwd = “yourpass”,db = “yourdatabase”,charset=‘utf8’,use_unicode=0)
( E- s" b- F& Q3 G% ^) R" j注意一定要charset=‘utf8’,use_unicode=0,这样取出来的数据才是str,然后可以在utf-8编码为web页直接显示了 |