3 字元編碼

2022-08-11 22:39:22 字數 1436 閱讀 4331

字元編碼

編者的話:從磁碟中讀取資料時,直接將存在檔案中的二進位制轉換成unicode的二進位制存到記憶體中,需指定乙個編碼如utf-8,前提是檔案在儲存時是以utf-8儲存的.系統中維護了一張關於utf-8到unicode的表,存檔案時,直接通過這張表將記憶體中unicode的二進位制翻譯成utf-8的二進位制寫入檔案.

ps.不同的編碼如gbk,也有一張類似的表存在.

開啟編輯器就開啟了啟動了乙個程序,是在記憶體中的,所以在編輯器編寫的內容也都是存放與記憶體中的,斷電後資料丟失,因而需要儲存到硬碟上,點選儲存按鈕,就從記憶體中把資料刷到了硬碟上。

在這一點上,我們編寫乙個py檔案(沒有執行),跟編寫其他檔案沒有任何區別,都只是在編寫一堆字元而已。

python直譯器執行py檔案的原理,例如pythontest.py

第一階段:python直譯器啟動,此時就相當於啟動了乙個文字編輯器

第二階段:python直譯器相當於文字編輯器,去開啟test.py檔案,從硬碟上將test.py的檔案內容讀入到記憶體中

第三階段:python直譯器解釋執行剛剛載入到記憶體中test.py的**

總結:python直譯器是解釋執行檔案內容的,因而python直譯器具備讀py檔案的功能,這一點與文字編輯器一樣,與文字編輯器不一樣的地方在於,python直譯器不僅可以讀檔案內容,還可以執行檔案內容

檔案從記憶體刷到硬碟的操作簡稱存檔案

亂碼一:存檔案時就已經亂碼

存檔案時,由於檔案內有各個國家的文字,我們單以shiftjis去存,

本質上其他國家的文字由於在shiftjis中沒有找到對應關係而導致儲存失敗,用open函式的write可以測試,f=open('a.txt','w',encodig='shift_jis')

f.write('你瞅啥\n何を見て\n')#'你瞅啥'因為在shiftjis中沒有找到對應關係而無法儲存成功,只存'何を見て\n'可以成功

但當我們用檔案編輯器去存的時候,編輯器會幫我們做轉換,保證中文也能用shiftjis儲存(硬存,必然亂碼),這就導致了,存檔案階段就已經發生亂碼

此時當我們用shiftjis開啟檔案時,日文可以正常顯示,而中文則亂碼了

檔案從硬碟讀到記憶體的操作簡稱讀檔案

亂碼二:存檔案時不亂碼而讀檔案時亂碼

存檔案時用utf-8編碼,保證相容萬國,不會亂碼,而讀檔案時選擇了錯誤的解碼方式,比如gbk,則在讀階段發生亂碼,讀階段發生亂碼是可以解決的,選對正確的解碼方式就ok了,而存檔案時亂碼,則是一種資料的損壞。

總結:

無論是何種編輯器,要防止檔案出現亂碼(請一定注意,存放一段**的檔案也僅僅只是乙個普通檔案而已,此處指的是檔案沒有執行前,我們開啟檔案時出現的亂碼)

核心法則就是,檔案以什麼編碼儲存的,就以什麼編碼方式開啟

python 3字元編碼

在python2中預設是ascii編碼,python3是utf 8編碼 在python 的源 檔案中經常會看到 a 中文 type a str b bytes a,encoding utf 8 bb xe4 xb8 xad xe6 x96 x87 type b bytes 以上的 都在python ...

Python自學筆記 3 字元編碼

可變長編碼 utf 8編碼可根據內容改變位元組數,ascii編碼實際上可以被看成是utf 8編碼的一部分 python提供了ord 函式獲取字元的整數表示,chr 函式把編碼轉換為對應的字元 ord a 65 ord 中 20013 chr 66 b chr 25991 文 如果知道字元的整數編碼,...

01字元編碼

程式設計中經常用到字元編碼,常用字元編碼有ascii american standard code for information interchange 編碼 unicode編碼 unicode編碼又有utf 8形式和utf 16形式 ascii表如下 擴充套件ascii表如下 unicode是一...