2014-01-25 61 views
1

我運行一個python腳本,我收到以下錯誤Python的ASCII編碼的問題

sql = 'insert into posts(msg_id, msg_text, msg_date) values("{0}", "{1}", "{2}")'.format(msg['id'], text.encode('utf-8'), msg['datime']) 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-31: ordinal not in range(128) 

我怎樣才能糾正這種錯誤,或者也許有例外抓住它?有任何想法嗎?

+0

這裏'text'的價值是什麼? –

回答

1

嘗試:

sql = u'insert into posts(msg_id, msg_text, msg_date) values("{0}", "{1}", "{2}")'.format(msg['id'], text.decode('utf-8'), msg['datime']) 

基本上,你text包含utf-8字符,並使用encode()方法,你保持原樣。但是主字符串(你正在格式化的字符串)是一個純ASCII字符串。通過在字符串前添加uu''),可以將其設置爲unicode字符串。然後,無論是在文本中,你想要它解碼爲utf-8,因此.decode()而不是.encode()

,如果你想趕上那種錯誤的,簡單地說:

try: 
    sql = … 
except UnicodeEncodeError, err: 
    print err 

,但如果你想真正擺脫任何UTF8/ASCII亂,你應該考慮切換到Python 3

HTH