python 字元編碼識別及轉換

2021-10-24 10:12:22 字數 3526 閱讀 7406

python教程 如何檢視字串編碼

python isinstance() 函式

python字串編碼

import chardet

str1 =

"你好啊!"

print chardet.detect(str1)

輸出如下。

python 2.x 預設的字元編碼是 ascii,預設的檔案編碼也是 ascii。

python 3.x 預設的字元編碼是 unicode,預設的檔案編碼是 utf-8。

無論以什麼編碼在記憶體裡顯示字元,存到硬碟上都是二進位制,所以編碼不對,程式就會出錯。

常見編碼有:

需要注意的是,存到硬碟上時是以何種編碼存的,再從硬碟上讀出來時,就必須以何種編碼讀,要不然就會出現亂碼問題。

常見的編碼錯誤的原因有如下,出現亂碼時,按照編碼之前的關係,挨個排錯就能解決問題。

python支援中文的編碼:utf-8、gbk 和 gb2312。

uft-8 為國際通用,常用有資料庫、編寫**。

gbk 如 windows 的 cmd 使用。

如果想要中國的軟體可以正常的在美國人的電腦上實現,有下面兩種方法:

讓美國人的電腦都裝上 gbk 編碼;

讓你的軟體編碼以 utf-8 編碼。

第一種方法不可現實,第二種方法比較簡單,但是也只能針對新開發的軟體,如果之前開發的軟體就是以 gbk 的編碼寫的,上百萬行**已經寫出去了,重新編碼成utf-8格式也會費很大力氣。

所以,針對已經用 gbk 開發的軟體專案如何進行編碼轉換,利用 unicode 的乙個包含了跟全球所有國家編碼對映關係的功能,就可以實現編碼轉換。

無論以什麼編碼儲存的資料,只要我們的軟體把資料從硬碟上讀到記憶體,轉成 unicode 來顯示即可,由於所有的系統、程式語言都預設支援 unicode,所有我們的 gbk 編碼軟體放在美國電腦上,載入到記憶體裡面,變成了 unicode,中文就可正常展示。

轉碼過程如下:

這個標記出現在檔案開頭,它的作用是告訴 python 直譯器此 .py 檔案是 utf-8 編碼,需要用 utf-8 的編碼去讀取這個 .py 檔案。

python2 將 string 處理為原生的 bytes 型別,而不是 unicode。

而 python3 所有的 string 均是 unicode 型別。

#!/usr/bin/env python

# coding=utf-8

temp =

'解琛'

# utf-8

temp_unicode =temp.decode(

'utf-8'

)print temp_unicode

print

isinstance

(temp_unicode,

unicode

)print

type

(temp_unicode)

temp_gbk = temp_unicode.encode(

'gbk'

)print temp_gbk

print

isinstance

(temp_gbk,

str)

print

type

(temp_gbk)

jerome = u"測試一下"

print jerome

print

isinstance

(jerome,

unicode

)print

type

(jerome)

isinstance函式來判斷乙個物件是否是乙個已知的型別,類似type

區別如下。

輸出內容如下。

解琛

true

>

����

true

>

測試一下

true

>

通過在字串前面加乙個u,可以指定字串的編碼為 unicode。

在轉化字串之前,需要使用decode來指定字串的編碼,然後使用encode將其轉化為指定的編碼格式。

現在我們面臨了第乙個問題:如何讓人類語言,比如英文被計算機理解?

我們以英文為例,英文中有英文本母(大小寫)、標點符號、特殊符號。如果我們將這些字母與符號給予固定的編號,然後將這些編號轉變為二進位制,那麼計算機明顯就能夠正確讀取這些符號,同時通過這些編號,計算機也能夠將二進位制轉化為編號對應的字元再顯示給人類去閱讀。

由此產生了我們最熟知的 ascii 碼。

ascii 碼使用指定的 7 位或 8 位二進位制數組合來表示 128 或 256 種可能的字元。

這樣在大部分情況下,英文與二進位制的轉換就變得容易多了。

雖然計算機是美國人發明的,但是全世界的人都在使用計算機。現在出現了另乙個問題:如何讓中文被計算機理解?

中文不像拉丁語系是由固定的字母排列組成的,ascii 碼顯然沒辦法解決這個問題。

為了解決這個問題,中國國家標準總局 1980 年發布《資訊交換用漢字編碼字符集》提出了 gb2312 編碼,用於解決漢字處理的問題。

1995 年又頒布了《漢字編碼擴充套件規範》(gbk)。

gbk 與 gb 2312—1980 國家標準所對應的內碼標準相容,同時在字彙一級支援 iso/iec10646—1 和 gb 13000—1 的全部中、日、韓(cjk)漢字,共計 20902 字。

這樣我們就解決了計算機處理漢字的問題了。

全球有那麼多的國家不僅有英文、中文還有阿拉伯語、西班牙語、日語、韓語等等。難不成每種語言都做一種編碼?

基於這種情況一種新的編碼誕生了:unicode。

unicode 又被稱為統一碼、萬國碼;它為每種語言中的每個字元設定了統一並且唯一的二進位制編碼,以滿足跨語言、跨平台進行文字轉換、處理的要求。

unicode 支援歐洲、非洲、中東、亞洲(包括統一標準的東亞象形漢字和南韓表音文字)。這樣不管你使用的是英文或者中文,日語或者韓語,在 unicode 編碼中都有收錄,且對應唯一的二進位制編碼。

這樣大家都開心了,只要大家都用 unicode 編碼,那就不存在這些轉碼的問題了,什麼樣的字元都能夠解析了。

但是,由於 unicode 收錄了更多的字元,可想而知它的解析效率相比 ascii 碼和 gb2312 的速度要大大降低,而且由於 unicode 通過增加乙個高位元組對 iso latin-1 字符集進行擴充套件,當這些高位元組位為 0 時,低位元組就是 iso latin-1 字元。

對可以用 ascii 表示的字元使用 unicode 並不高效,因為 unicode 比 ascii 占用大一倍的空間,而對 ascii 來說高位元組的 0 毫無用處。

為了解決這個問題,就出現了一些中間格式的字符集,他們被稱為通用轉換格式,即 utf(unicode transformation format)。

而我們最常用的 utf-8 就是這些轉換格式中的一種。

python字元編碼轉換

python 預設指令碼檔案都是 utf 8 編碼的,當檔案中有非 utf 8 編碼範圍內的字元的時候就要使用 編碼指示 來修正.關於 sys.defaultencoding,這個在解碼沒有明確指明解碼方式的時候使用。檔案編碼 python預設的編碼方式是unicode s 你好 轉換成utf 8編...

python編碼及型別轉換

使用chardet模組來判斷資料的編碼 輸入引數為str型別。coding utf 8 import chardet f open hadoop.txt r 開啟文字檔案,唯讀 about f.read 讀取文字內容 print cchardet.detect about 判斷字串編碼 將字串的原編...

python 字元編碼轉換詳解

unicode所有的中文或者英文都是占用兩個位元組 16位 ascii 只能存英文 8位 utf 8 可變長的字元編碼,所有英文按ascll佔乙個位元組,常用中文字元用utf 8編碼占用3個位元組 coding gbk import sys with語句 為了避免開啟檔案後忘記關閉,可以通過管理上下...