我想在使用它作爲MySQL SELECT語句的一部分之前對UTF-8編碼字符串進行清理。消毒UTF-8編碼字符串
例如,我有:
query = MySQLdb.escape_string(query)
但此行是導致凸起的例外,其讀取
「的ASCII」編解碼器在0-2位置無法編碼的字符:序不在 範圍內(128)。
我該如何處理?
我想在使用它作爲MySQL SELECT語句的一部分之前對UTF-8編碼字符串進行清理。消毒UTF-8編碼字符串
例如,我有:
query = MySQLdb.escape_string(query)
但此行是導致凸起的例外,其讀取
「的ASCII」編解碼器在0-2位置無法編碼的字符:序不在 範圍內(128)。
我該如何處理?
看起來MySQLdb試圖將你的unicode查詢編碼爲一個字符串。爲此,它使用默認編碼:ASCII。
現在,你的輸入不能被編碼成ASCII,所以你只需告訴python它應該使用什麼編碼:utf-8。
您可以通過使用query = query.encode('utf-8').
準確地說我的問題。我必須跳出UTF-8編碼,才能讓MySQL保持高興並讓其他人快樂。 – SK9 2011-12-25 09:40:44
不幸的是,無論何時使用python無法自行處理的非ASCII unicode字符串,都會有許多模塊。對於你的MySQLdb問題,你可能想要查看一個ORM層,比如SQLAlchemy。 – 2011-12-25 10:56:31
query = "こうえん"
query = MySQLdb.escape_string(unicode(query,'utf-8'))
這給出了「異常值:解碼Unicode不被支持」。我正在使用Python 2.6.6。我從問題中刪除了「こうえん」,因爲它沒有幫助。 – SK9 2011-12-24 17:19:42
我是否需要爲MySQL設置一些全局字符集? – SK9 2011-12-24 17:23:01
哪個函數給出錯誤?嘗試分離兩個函數,即'query = unicode(query,'utf-8')',然後將'query'傳遞給轉義函數。哪一行是錯誤? – FakeRainBrigand 2011-12-24 17:26:57
在你的例子中query
的類型是'str'。如果你在字符串前面加上'u',它變成'unicode'類型。
>>> query = "こうえん"
>>> print type(query)
<type 'str'>
>>> query = u"こうえん"
>>> print type(query)
<type 'unicode'>
這是Python版本2.x和3.x之間的主要區別之一。從3.0開始,默認情況下所有的字符串都是'unicode'。
*注意:*我不認爲我已經安裝了該模塊,但這是解決常見問題的通用解決方案。我希望它能起作用,但如果它不@阿達的代碼可能會(或兩者的結合)。 – FakeRainBrigand 2011-12-24 16:17:13
我正在使用Python 2.6.6。我從問題中刪除了「こうえん」,因爲它沒有幫助。 – SK9 2011-12-24 17:22:32
我是否需要爲MySQL設置一些全局字符集? – SK9 2011-12-24 17:23:14
顯然東西是假設你的字符串,實現這一目標是在US-ASCII而不是UTF-8。我會嘗試明確地編碼它像'query.encode(「utf-8」)' – 2011-12-24 16:01:49