字串編碼詳解

2022-09-16 21:00:33 字數 1854 閱讀 3837

計算機只能處理數字,文字轉換成數字才能處理。

計算機中8個bit作為乙個位元組byte,所以乙個位元組最大的表示數字就是255
ascii碼

乙個位元組表示 --- 美國的標準編碼 ---- 最多表示255個字元
中國 gb2312

用兩個位元組表示乙個漢字,把ascii碼也包含進去
unicode

全球統一的編碼 ,用16,32bit 把 所有的語言都統一到一套編碼中
例子:

字母 a  -- ascii 65       uincode  0000 0000 0100 0001        二進位制  0100 0001

漢字 中 -- ascii 已經超出 uinicode 20013 二進位制 0100 1110 0010 1101

unicode --- 英文會多一倍的空間,和傳輸時間

utf-8

可變長 編碼 ---utf-8

用於傳輸和儲存(3個位元組表示乙個中文)

注意 : 在記憶體計算,程式設計的時候 --- 定長的 unicode 更好使用

python中獲取 預設的解碼方式

import sys

sys.getdefaultencoding()

python 2.x 需要在檔案上方宣告檔案的編碼方式# -*- coding: utf8 -*-,可以通過str.decode/str.encode處理字串的文字編碼

sys.setdefaultencoding('utf-8')來保證我們的編碼

python直譯器在 執行py檔案的時候,遇到(沒有指定 decode 方式的情況下) str 會按照 預設的解碼方式進行解碼;

即 sys.getdefaultencoding()得到的編碼方式, 所以py2中的中文會和ascii衝突出錯,需要開頭指定 解碼方式

py2 -- ascii   需要 *coding:utf8* 指明,, 或者u』中文』保證被轉換成 unicode 編碼

py3 -- utf8

例子:

(1)    s = '你好'

r = s.decode('utf-8').encode('gb2312')

print r

報錯 syntaxerror: non-ascii character '\xe4' in file

(2) # _*_coding:utf-8_*_

s = '你好'

r = s.decode('utf-8').encode('gb2312')

print r

正確

這種問題在py3 中已經不存在

py 2 有str 和 unicode 兩種 資料型別,str型別需要 先decode

py 3 只有 unicode,所以可以直接encode

window --- gb2312編碼

linux ---- utf8

enocde 之前 要先轉換成 unicode

字串編碼

1.unicode 的編碼方式 編碼類似1小時和60分鐘的關係,本質的時間刻度還是相同的。unicode 編碼有 utf 8 utf 16 和 utf 32 它們都是將數字轉換到程式資料的編碼方案。utf 8 以位元組為單位。表示乙個字元時,能用乙個位元組就不用兩個或者三個位元組表示。utf 16 ...

字串與編碼

首先應該把位元組陣列看成是string的載體。dot net使用的字串string是unicode編碼的 它也是以unicode編碼的形式顯示字串。以下是用自己語言對幾個常用函式的說明 自己總結的,反正看不明msdn bytes system.text.encoding.unicode.getbyt...

Python字串編碼

在python中有些特殊的地方是存在兩種字串,分別為str和unicode字串,他們都繼承自basestring。如 s hello world s為str us u hello world us為unicode。使用help str 和help unicode 可以檢視各自說明,他們都有decod...