怎麼解決Python3亂碼問題?

在獲取文件名的時候發生了亂碼的現象 求解 地址為 http://www.zjks.net/app/portal/s_common_file!download.action?s_common_fileDomain.id=1006


首先嚴格來說這是你的目標網站的問題,按照RFC規範,HTTP頭文件中的字元編碼被指定為 ISO-8859-1,中文是不能直接表示在這個HTTP頭裡的,要在Content-Disposition的filename參數中指定中文文件名,通常有以下方法:

  1. 使用RFC5987中規定的方法,即filename*=UTF-8"..."...指定字元編碼(正確,但不一定所有工具都支持)
  2. 使用urlencode,表示成%xx%xx的形式(語法上正確,但按照RFC,得到的文件名也是%xx%xx,而不是url解碼後的形式)
  3. 直接塞一個gbk或者utf-8的文件名進去(錯誤,會出現亂碼)

不幸的許多網站以及web框架使用的方法是3,有些框架最開始是為英文網站設計的,根本就沒考慮過適應多語種的問題。為此,很多瀏覽器在處理Content-Disposition的時候會特殊處理,遇到非ASCII的文件名的時候會「猜測」一次文件名的編碼。但Python的web庫是按照RFC編寫的,因此沒有這個特殊處理。

解決方案也只能比較無奈地強制解碼一次:

&>&>&> response.headers.get_filename().encode("iso-8859-1").decode("gbk")
"計劃調整申請表(新).xls"

好在ISO-8859-1這個字元編碼是單位元組編碼,0 - 0xff之間都有對應的字元,不會出現編解碼錯誤。

如果是Python2,由於直接使用ANSI字元編碼,反而沒有這個問題。


幫你寫了一下,有可能不對。

用python2 幫你寫一個對的


推薦閱讀:

Python3.5.1(64位)安裝beautifulsoup4.4.1不成功怎麼回事?
Python3網頁抓取Non-BMP character not supported in Tk怎麼解決?
python3下,re.findall返回值前後的[" 『]怎麼去掉?
pycharm 如何程序運行後,仍可查看變數值?(非Debug mode, 因為debug運行太慢)
python對變數賦值為什麼會出現以下的情況?

TAG:Python3x | 亂碼 | 中文亂碼 |