簡體   English   中英

使用帶有SQLAlchemy和Pyramid的unicode

[英]Using unicode with SQLAlchemy and Pyramid

我有一個textbox ,一個button和一個search功能。 在搜索功能中,我從textbox獲取請求並使用:

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

如果關鍵字只是拉丁編碼,結果是可以的,但是當我輸入unicode (例如,中文或日文)時,它不起作用。

例如おはようございます是我在db ok中的字符串? 當我輸入います來搜索它會比較並給我おはようございます結果,對吧? 但事實並非如此。 當我打印おはようございます ,我可以在屏幕上看到ã?Šã?¯ã‚ˆã?†ã?”ã?–ã?„ã?¾ã?™

這是被視為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 ,這是因為Windows-1252未定義0x81


這只是將使用的編碼聲明到接收端的問題,您可以使用金字塔:

response.charset = 'utf8'

請注意,這是一個網頁,如果你的意思是Windows終端只是忘了它。

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

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

<meta charset="utf-8">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM