Re: [問題] 請問一下unicode的問題
酶뀠引述《pky.bbs@alexbbs.twbbs.org (夏天的風)》之銘言:
: ※ 引述《Tiberius.bbs@ptt.cc (小敗踢)》之銘言:
: : 不知道你要的是不是指定原始碼的 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)
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章