簡體   English   中英

Python解碼反引號

[英]Python decoding of back quotations

我正在收到這個問題
“ UnicodeEncodeError:'latin-1'編解碼器無法編碼字符u'\\ u201d'”

我是一個整體上使用數據庫的新手。 以前,我一直在使用SQLite3。 但是,現在正在向MySQL過渡/遷移時,我注意到u'\\ u201d'和u'\\ u201c'字符位於我的某些文本數據中。

我目前正在制作一個python腳本來解決遷移問題; 但是,我陷入了以前看不見的編解碼器問題。

所以我的問題是,如何替換/解碼這些值,以便將它們實際存儲在MySQL DB中?

解碼這些字符沒有問題; 無論他們是從,如果他們顯示為未來\” )和\“他們已經被正確解碼。

問題是編碼這些字符。 如果要將字符串存儲在Latin-1列中,則它們只能包含存在於Latin-1中的256個字符,而這兩個字符不在其中。


所以我的問題是,如何替換/解碼這些值,以便將它們實際存儲在MySQL DB中?

顯而易見的解決方案是在MySQL中使用UTF-8列而不是Latin-1。 這樣,這個問題甚至不存在。 任何Unicode字符串都可以編碼為UTF-8。


但是假設您由於某些原因無法做到這一點……

Python帶有不同的內置支持, 錯誤處理程序 ,可以幫助你做一些與這些字符,而編碼它們。 您只需要決定什么是“東西”即可。

假設您的字符串看起來像hey “hey” hey 每個錯誤處理程序將執行以下操作:

  • s.encode('latin-1', 'ignore')hey hey hey
  • s.encode('latin-1', 'replace')hey ?hey? hey hey ?hey? hey
  • s.encode('latin-1', 'xmlcharrefreplace'):嘿“嘿”嘿`
  • s.encode('latin-1', 'backslashreplace'):嘿\\ u201chey \\ u201d嘿`

前兩個優點是可讀性強,但缺點是您永遠無法恢復原始字符串。 如果您希望這樣做,但又希望閱讀更多內容 ,則可以考慮使用像unidecode這樣的第三方庫:

  • unidecode('hey “hey” hey').encode('latin-1'):嘿“嘿”嘿`

最后兩個是無損的,但是有點丑陋。 盡管在某些情況下它們看起來會很不錯,例如,如果您正在構建XML文檔,則xmlcharrefreplace (甚至使用'ascii'而不是'latin-1' )也可以為您提供XML查看器中的所需內容。 如果您知道自己想要什么,則可以使用針對各種其他用例(例如HTML引用或XML命名實體而不是編號實體)的專用轉換器。

但通常,您必須在丟棄信息或以某種丑陋但可恢復的形式“隱藏”信息之間做出選擇。

暫無
暫無

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

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