Python編碼介紹

在 python 源代碼文件中,如果你有用到非ASCII字元,則需要在文件頭部進行字元編碼的聲明,聲明如下:# code: UTF-8因為python 只檢查 #、coding 和編碼字元串,所以你可能回見到下面的聲明方式,這是有些人為了美觀等原因才這樣寫的:#-*- coding:UTF-8 -*-常見編碼介紹:GB2312編碼:適用於漢字處理、漢字通信等系統之間的信息交換GBK編碼:是漢字編碼標準之一,是在 GB2312-80 標準基礎上的內碼擴展規範,使用了雙位元組編碼ASCII編碼:是對英語字元和二進位之間的關係做的統一規定Unicode編碼:這是一種世界上所有字元的編碼。當然了它沒有規定的存儲方式。UTF-8編碼:是 Unicode Transformation Format - 8 bit 的縮寫, UTF-8 是 Unicode 的一種實現方式。它是可變長的編碼方式,可以使用 1~4 個位元組表示一個字元,可根據不同的符號而變化位元組長度。編碼轉換:Python內部的字元串一般都是 Unicode編碼。代碼中字元串的默認編碼與代碼文件本身的編碼是一致的。所以要做一些編碼轉換通常是要以Unicode作為中間編碼進行轉換的,即先將其他編碼的字元串解碼(decode)成 Unicode,再從 Unicode編碼(encode)成另一種編碼。decode的作用是將其他編碼的字元串轉換成Unicode編碼,egname.decode(「GB2312」),表示將GB2312編碼的字元串name轉換成Unicode編碼encode的作用是將Unicode編碼轉換成其他編碼的字元串,egname.encode(」GB2312「),表示將GB2312編碼的字元串name轉換成GB2312編碼所以在進行編碼轉換的時候必須先知道 name 是那種編碼,然後 decode 成 Unicode 編碼,最後載 encode 成需要編碼的編碼。當然了,如果 name 已經就是 Unicode 編碼了,那麼就不需要進行 decode 進行解碼轉換了,直接用 encode 就可以編碼成你所需要的編碼。值得注意的是:對 Unicode 進行編碼和對 str 進行編碼都是錯誤的。具體的說就是:如果在UTF-8文件中,則這個字元串就是 UTF-8編碼的。它的編碼取決於當前的文本編碼。當然了,GB2312文本的編碼就是GB2312。要在同一個文本中進行兩種編碼的輸出等操作就必須進行編碼的轉換,先用decode將文本原來的編碼轉換成Unicode,再用encode將編碼轉換成需要轉換成的編碼。eg:由於內置函數 open() 打開文件時,read() 讀取的是 str,讀取後需要使用正確的編碼格式進行 decode()。write() 寫入時,如果參數是 Unicode,則需要使用你希望寫入的編碼進行 encode(),如果是其他編碼格式的 str,則需要先用該 str 的編碼進行 decode(),轉成 Unicode 後再使用寫入的編碼進行 encode()。如果直接將 Unicode 作為參數傳入 write() ,python 將先使用源代碼文件聲明的字元編碼進行編碼然後寫入。# coding:UTF-8fp1=open("test.txt","r")info1=fp1.read()# 已知是 GBK 編碼,解碼成 Unicodetmp=info1.decode("GBK")fp2=open("test.txt","w")# 編碼成 UTF-8 編碼的 strinfo2=tmp.encode("UTF-8")fp2.write(info2)fp2.close()獲取編碼的方式:判斷是 s字元串否為Unicode,如果是返回True,不是返回False : isinstance(s, unicode)下面代碼可以獲取系統默認編碼:#!/usr/bin/env python#coding=utf-8import sysprint sys.getdefaultencoding()
推薦閱讀:

《Code 編碼:隱匿在計算機軟硬體背後的語言》讀書筆記
引得市缺字字體編碼方案說明
深度學習進修之旅
業力與大腦神經編碼記憶 腦可塑性-大腦皮層增大-記憶學習經歷固化 大腦重構 關鍵期MeCP2蛋白 中風大腦修復
深度報文檢測基礎之編解碼

TAG:Python | 編碼 | 介紹 |