在日常使用中,我們難以避免會遇到編碼轉換問題。(如果編碼是什麼都不知道,請先看:什麼是編碼?)
而進行編碼轉換的前提是你知道這個字串使用的是什麼編碼。
比如你使用 urllib.request.urlopen() 獲取乙個網頁時,你特麼如果不知道網頁的編碼會怎樣?
直接 read().decode() 就可能會出現下邊錯誤:
這是因為無論是 encode() 還是 decode(),預設採取的編碼/解碼都是 encoding="utf-8" 編碼……
雖然你大 utf-8 行跡踏遍天下,但在這神州大地,處處都有奇葩的好不?
這時候需要乙個可靠的方式來檢測字串到底是什麼編碼,這樣我們才能對症下藥!
這裡我向大家推薦乙個不錯的模組:chardet,使用它就可以檢測字串的編碼。
chardet 模組可以檢測以下編碼:
chardet 模組安裝方法:
1. (推薦)使用 pip 安裝,開啟命令列視窗(windows 的 cmd,linux 的 terminal,mac 的「終端」)
輸入命令:pip install chardet
開啟命令列視窗(同上),切換目錄到上方解壓包的資料夾,輸入命令:c:\python34\python.exe setup.py install
chardet 模組用法:
非常簡單,使用該模組的 detect() 函式即可:
>>> import urllib.request
>>> response = urllib.request.urlopen("").read()
>>> import chardet
>>> chardet.detect(response)
哦,confidence 是可信度的意思……
0.99 就是 99% 確定是 'gb2312'!
年輕人,你太傲嬌了,偶其實使用的是 gbk 編碼(gbk 是 gb2312 的擴充套件)
所以你直接 decode('gb2312') 還是會報錯的:(是不是很炸裂)
>>> response.decode("gb2312")
traceback (most recent call last):
file "", line 1, in response.decode("gb2312")
unicodedecodeerror: 'gb2312' codec can't decode byte 0xfd in position 22581: illegal multibyte sequence
你現在有兩種選擇:
一、忽略識別不出的字元(gb2312 支援的漢字比較少,如果用這種方法會出現小部分亂碼)
>>> response.decode("gb2312", "ignore")
……# 賈伯斯最精彩演講:這三個故事決定了我的一
# 42個鍛鍊大腦的方法,你想不聰明都不行!
# 潘靠賜輳淚流滿面**)
……
二、(推薦)由於 gbk 是向下相容 gb2312,因此你檢測到是 gb2312,則直接用 gbk 來編碼/解碼
>>> if chardet.detect(response)['encoding'] == 'gb2312':
response.decode('gbk')
……# 賈伯斯最精彩演講:這三個故事決定了我的一
# 42個鍛鍊大腦的方法,你想不聰明都不行!
# 屌絲看完,淚流滿面**)
……
一次性關閉所有的activity
看到很多關於應用退出的問題,今天在這裡為大家簡單總結一下,如果說的不對還望大家見諒。方法一 system.exit 0 和android.os.process.killprocess android.os.process.mypid 我想很多人都嘗試過,當關 閉多個activity的時候這兩個方法根...
一次性備份SQL Server中所有的資料
備份處理的儲存過程 set ansi nulls on set quoted identifier on go 備份所有資料庫 備份的檔名為資料庫名 日期 bak 將所有的使用者資料庫 或指定的資料庫列表 備分到指定的目錄下.呼叫示例 備份所有使用者資料庫 exec p backupdb bkpat...
一次性退出所有activity
可以利用清理歷史棧的方法,來巧妙關閉所有activity,首先用乙個設定為不可見的activity a來啟動程式,這個activity a的作用只是用來墊棧底,只有啟動和退出程式才會用到這個activity,而你需要退出的時候,只需要跳轉至這個activity a 並讓a finish自己就可以實現...