2011-12-24 76 views
1

我想在使用它作爲MySQL SELECT語句的一部分之前對UTF-8編碼字符串進行清理。消毒UTF-8編碼字符串

例如,我有:

query = MySQLdb.escape_string(query) 

但此行是導致凸起的例外,其讀取

「的ASCII」編解碼器在0-2位置無法編碼的字符:序不在 範圍內(128)。

我該如何處理?

+1

顯然東西是假設你的字符串,實現這一目標是在US-ASCII而不是UTF-8。我會嘗試明確地編碼它像'query.encode(「utf-8」)' – 2011-12-24 16:01:49

回答

3

看起來MySQLdb試圖將你的unicode查詢編碼爲一個字符串。爲此,它使用默認編碼:ASCII。

現在,你的輸入不能被編碼成ASCII,所以你只需告訴python它應該使用什麼編碼:utf-8。

您可以通過使用query = query.encode('utf-8').

+0

準確地說我的問題。我必須跳出UTF-8編碼,才能讓MySQL保持高興並讓其他人快樂。 – SK9 2011-12-25 09:40:44

+0

不幸的是,無論何時使用python無法自行處理的非ASCII unicode字符串,都會有許多模塊。對於你的MySQLdb問題,你可能想要查看一個ORM層,比如SQLAlchemy。 – 2011-12-25 10:56:31

0
query = "こうえん" 
query = MySQLdb.escape_string(unicode(query,'utf-8')) 
+1

這給出了「異常值:解碼Unicode不被支持」。我正在使用Python 2.6.6。我從問題中刪除了「こうえん」,因爲它沒有幫助。 – SK9 2011-12-24 17:19:42

+0

我是否需要爲MySQL設置一些全局字符集? – SK9 2011-12-24 17:23:01

+0

哪個函數給出錯誤?嘗試分離兩個函數,即'query = unicode(query,'utf-8')',然後將'query'傳遞給轉義函數。哪一行是錯誤? – FakeRainBrigand 2011-12-24 17:26:57

3

在你的例子中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'。

+0

*注意:*我不認爲我已經安裝了該模塊,但這是解決常見問題的通用解決方案。我希望它能起作用,但如果它不@阿達的代碼可能會(或兩者的結合)。 – FakeRainBrigand 2011-12-24 16:17:13

+0

我正在使用Python 2.6.6。我從問題中刪除了「こうえん」,因爲它沒有幫助。 – SK9 2011-12-24 17:22:32

+0

我是否需要爲MySQL設置一些全局字符集? – SK9 2011-12-24 17:23:14