Python3 關於UnicodeDecodeError/UnicodeEncodeError: ‘gbk’ codec can’t decode/encode bytes類似的文本編碼問題

来源:http://www.cnblogs.com/worstprogrammer/archive/2016/02/14/5189758.html
-Advertisement-
Play Games

以下是小白的爬蟲學習歷程中遇到並解決的一些困難,希望寫出來給後來人,如有疏漏懇請大牛指正,不勝感謝! 首先,我的代碼是這樣的 1 2 3 import requests 4 5 url = 'http://www.acfun.tv/' 6 html = requests.get(url) 7 8 p


  以下是小白的爬蟲學習歷程中遇到並解決的一些困難,希望寫出來給後來人,如有疏漏懇請大牛指正,不勝感謝!

  首先,我的代碼是這樣的

1 
2 
3 import requests
4 
5 url = 'http://www.acfun.tv/' 
6 html = requests.get(url)
7 
8 print(html.text)

 

python2中解決方法(題外話)

參考:http://www.cnblogs.com/zhaoyl/p/3770340.html

在前面加上以下代碼即可

import sys 
reload(sys) # Python2.5 初始化後會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入 
sys.setdefaultencoding('utf-8')

一般就能解決了

 

 

而在Python3中:

如果在控制臺中運行,就遇到瞭如下的UnicodeEncodeError:

  

 

1.原因

  #參考了http://www.tuicool.com/articles/nEjiEv

  首先,代碼中的html.text會自動將獲取的內容解析為unicode  (與html.content不同。兩者區別就是html.content的類型是bytes,而html.text類型是str,bytes通過解碼(decode)可以得到str,str通過編碼(encode)得到bytes)    html.text這種字元串如果要輸出應當用utf-8來編碼。而cmd中,(對於多數中國人所用的是中文的系統)預設字元編碼是gbk

  從而導致此種現象:

  python要將utf-8編碼的字元串,在gbk的cmd的中列印出來。於是出現了編碼錯誤

2.解決方法

  原文中在貼了含有真正解決方法的網頁的網址,http://www.crifan.com/summary_python_2_x_common_string_encode_decode_error_reason_and_solution/

而我怎麼都打不開。

  我最終辦法就是使用Pycharm這個IDE來運行查看結果,中文部分就能正常顯示了。

  至於如何在cmd上解決print的問題我仍然不知道如何解決。

 

  

 

寫入文件時引發的UnicodeEncodeError:

參考:https://segmentfault.com/a/1190000004269037

  在測試過程中多次出現在寫入文件時報告錯誤“UnicodeEncodeError: 'ascii' codec can't encode character '\u56de' in position 0: ordinal not in range(128)”,這是由於我們在抓取網頁的時候採用的是UTF-8編碼,而存儲時沒有指定編碼,在存儲到文件的過程中就會報錯。

  解決辦法為:
在讀取文件時加入指定UTF-8編碼的選項

f = open('content.txt','a',encoding='UTF-8')

 

另外需要註意的是使用requests獲取到網頁之後同樣要指定編碼

html = requests.get(url)
html = re.sub(r'charset=(/w*)', 'charset=UTF-8', html.text)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 出處:http://www.cnblogs.com/_popc 外話: 有關web前端優化的博文,博客園中有許多網友的博客中都有介紹,而且詳細、精準。樓主打算寫這個博客,算是對自己一年工作來的一個總結和積累有些知識從別的地方拷貝過來的,但是都審查過。 引言: 1. 慢的頁面可能會網站失去更多的用戶.
  • 背景 前幾天有同事問到我一個簡單的功能, 就是當你使用枚舉時如何給每個一元素增加描述字元串並且可以很容易的讀取出來. 比如有一個枚舉類型是列出對一個問題給出的選項(例如: 同意?不同意?中立?): public enum AssessmentAnswer { Strongly_Disagree =
  • 前言 現在,經驗證的 DreamSpark 學生無需承擔任何責任即可免費獲取 Microsoft Azure for DreamSpark,且沒有時間限制和意外費用。如果需要,您隨後可升級獲取更多服務,但您現在即可藉助背後 Microsoft 雲的強大功能托管您的 Web 應用和網站,且無需花費任何
  • 信號的概念 信號(signal)-- 進程之間通訊的方式,是一種軟體中斷。一個進程一旦接收到信號就會打斷原來的程式執行流程來處理信號。 幾個常用信號: SIGINT 終止進程 中斷進程 (control+c) SIGTERM 終止進程 軟體終止信號 SIGKILL 終止進程 殺死進程 SIGALRM
  • 別人的項目,剛用MyEclipse載入進來,一大堆錯誤(見怪不怪了) JSP報錯,上圖: 報錯:“The method getContextPath() from the type HttpServletRequest refers to the missing type String” 解決方式:
  • 又一個milestone即將結束,有了些許的時間總結研發過程中的點滴心得,今天總結下如何在編寫python代碼時對非同步操作進行同步化模擬,從而提高代碼的可讀性和可擴展性。 游戲引擎一般都採用分散式框架,通過一定的策略來均衡伺服器集群的資源負載,從而保證伺服器運算的高併發性和CPU高利用率,最終提高游
  • 事件模型是被廣泛使用的好東西,但是C++標準庫里沒有現成的,其他實現又複雜或者不優雅,比如需要使用巨集。現在VC11可以用在XP下了,那麼就痛快的拿起C++11提供的先進設施組合出一個輕便的實現吧。 為了達到簡潔的目的,需要放棄一些特性: 1、不支持判斷函數是否已經綁定過(因為std::functio
  • 清除空格的方法是不安全的,部分原因是因為字元中的空格非常多,例如 "addslashes的問題在 於黑客 可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為一個有效的多位元組字元,其中的0xbf5c仍會 被看作是單引號,所以addslashes無法成功
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...