2013-01-08 125 views
0

我有textboxbuttonsearch函數。在搜索功能我從textbox的請求,並使用:在SQLAlchemy和金字塔中使用unicode

queryE = queryE.filter(queryE.Campaign.CampaignName.like("%"+CampaignsKeyWord+"%")) 

如果關鍵字只是拉丁編碼,結果是好的,但是當我進入的Unicode(例如,中文或日文),它不起作用。

例如おはようございます是我的字符串在DB好嗎?當我輸入います來搜索它會比較並給我おはようございます結果吧?但沒有。當我打印おはようございます,我可以在屏幕上看到ã?Šã?¯ã‚ˆã?†ã?」ã?–ã?„ã?¾ã?™

+1

您必須更具體。什麼不行?你看到了什麼,你期望看到什麼?你對每種情況給出了什麼樣的意見? –

+0

例如おはようございます是我的字符串db ok嗎? –

+1

您需要[編輯]您的問題,同時添加請求輸入,數據庫內容以及您從數據庫中獲得的內容,以及您的期望。沒有這些信息,我們無法幫助你。 –

回答

1

這就是被視爲Windows-1252的UTF-8字節おはようございます。典型的帶有未設置內容類型字符集的Windows終端或網頁。但你不必擔心,你的程序輸出有效UTF-8,只是對它們進行比較:

你所看到的轉換到Windows 1252:

e3 3f 8a e3 3f af e3 82 88 e3 3f 86 e3 3f 94 e3 3f 96 e3 3f 84 e3 3f be e3 3f 99 

預期結果在UTF-8:

e3 81 8a e3 81 af e3 82 88 e3 81 86 e3 81 94 e3 81 96 e3 81 84 e3 81 be e3 81 99 

這裏唯一的不同是0x3f"?"),而不是0x81,這是因爲0x81未定義適用於Windows 1252。


這只是一個聲明使用的編碼到接收端的問題,與金字塔,你可以這樣做:

response.charset = 'utf8' 

注意,這是一個網頁,如果你的意思是Windows終端就忘關於它。

+0

謝謝你的回答,我會試試 –

+0

@IronHoang dit it work? – Tshepang

1

如果您的金字塔模板或該頁面的響應沒有正確的字符編碼集,它可能會導致文本變成亂碼。我可能是錯的,但從提供的信息來看,它聽起來像是與Pyramid或SQLAlchemy相關的HTML文檔更多。如果Python在解碼諸如日語的文本時遇到問題,則可能會引發UnicodeDecodeError,而不是嘗試輸出文本亂碼。

如果您在金字塔中使用模板(例如Chameleon),則可能在其元標記中設置了錯誤的編碼集。如果是這樣,請嘗試在模板中切換到'utf-8'類似於:

<meta charset="utf-8">