作者Lucemia (生の直感、死の予感)
看板Python
标题Re: [问题] 请问一下unicode的问题
时间Mon Jan 8 16:58:21 2007
酶뀠引述《
[email protected] (夏天的风)》之铭言:
: ※ 引述《[email protected] (小败踢)》之铭言:
: : 不知道你要的是不是指定原始码的 charset ?
: : http://www.python.org/dev/peps/pep-0263/
: : 如果不指定的话, Python 预设原始码用的是 ASCII
: : 所以十分可能需要加个
: : # vim: set fileencoding=utf-8 :
: : 之类的 (同时搞定编辑跟执行, 真棒啊 XD)
: 如果是在windows的编辑器的话
: 都会有编辑器 encoding 选项给你选 (preferences -> encoding)
: 把它改成你要的编码 这样你在上面打的字就会是该编码下的字
查一查总算解决了..
我碰到的问题是在 python dbi 中有这两行 (MySQLdb module)
charset = db.character_set_name()
query = query.encode(charset)
db.character_set_name() 这个设定我在DB端将一堆选项勾成utf8
都没有反应,回传的charset永远都是 latin-1
也查不到这个function他是参照database的那个设定值回传的
cursor.execute('replace into pattern(pid,pattern) values (%s,%s)',
(pid.encode('utf-8'),pname.encode('utf-8')))
很幸运的在查看讨论区後 发现中文或日文,使用query内变数的方式传值的话
可以避免掉这种问题
X不行 execute("replace into xxx values ('你','我')") 会有encode error
O可以 execute("replace into xxx values (%s,%s)",('你','我'))
这个方式用起来比原本塞字进去更容易,使用python读db中的资料也正常
虽然在db里头看会是乱码
#---------附上简单的python mysql db code--------
import dbi
import MySQLdb
conn = MySQLdb.connect(host='localhost',user='123',passwd='456',db='db1')
cursor = conn.cursor()
cursor.execute('select * from db11 where name = %s',names.encode('utf-8') )
results = cursor.fetchall()
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.96.89.83
※ 编辑: Lucemia 来自: 140.96.89.83 (01/08 16:59)