字元編碼相關

2021-07-13 05:46:58 字數 1556 閱讀 2237

1,文字編輯器開啟檔案,讀入二進位制序列

2,如果有bom頭,直接根據bom頭使用相應的字元編碼解碼方式,如果沒有,則根據一套演算法得出該檔案最有可能為哪種編碼,再使用相應的解碼方式解碼。

或者先使用預設的解碼方式(ansi)進行解碼,遇到問題再呼叫適配演算法進行解碼方式適配。

3,文字編輯器解碼完成,將得到的二進位製碼和解碼方式傳給操縱作系統,作業系統根據得到的位元組碼和解碼方式再轉成系統內部指定的編碼方式儲存在記憶體中顯示出來。

4,編輯完成進行儲存時,先將記憶體中的位元組碼轉換成所需儲存的文字的編碼方式,再將轉換好的位元組碼寫入到檔案中。

ps:windows內部制定編碼方式為unicode(utf-16 le),linux為utf-8;

1,直接由文字編輯器複製/剪下得到的是記憶體中相應的字串,這些字串是由系統內部指定的編碼方式編碼的。

2,因為文字顯示統一使用系統內部指定的編碼,所以不會出現編碼不同的檔案之間相互複製黏貼時出現亂碼現象。

ppppps,以上資訊有待測試,有些說這個用於顯示的編碼方式是ansi,如控制台就是預設使用ansi**頁.

輸入法相關:

1,文字編輯器向作業系統申請寫入操作。

2,作業系統判定是否需要ime(輸入法軟體)。

3.1,如果不需要,直接將鍵盤按鍵對映成相應位元組碼(系統內部編碼編碼)儲存到相應記憶體區再顯示出來(ps:這一步是否會反饋給文字編輯器有待驗證)

3.2,如果需要,則啟動ime,將鍵盤訊號傳給ime處理。

4,ime得到鍵盤訊號,根據自己的輸入法規則得到最終的字元,將該字元的位元組碼傳回給系統

ps:該字元的編碼方式為系統內部編碼方式,所以輸入法軟體只管適配系統內部編碼方式即可。

編碼相關:

1,主要的編碼為unicode,gb2312,gbk,gb10800,big5,jis....

unicode:分基本字元面和擴充套件字元面,基本字負面包含6w餘個字元,可直接由兩個位元組表示出來。擴充套件字元面需要4個位元組才能表示完全。

gb2312:中國的第一部編碼,採用可變長方式編碼,單位元組相容ascii碼,雙位元組用於便是漢子,只有6k餘個字元。

gbk:gb2312的擴充套件,編碼方式完全一樣,只是將gb2312沒有使用的**用上了,達到2w餘個字元。

gb10800:最新的國標編碼,單位元組表示ascii碼,雙位元組完全相容gbk,實現了4位元組編碼,4位元組編碼部分相容unicode擴充套件字元面。

big5:繁體字編碼

jis:日語編碼

2,unicode當前有兩種編碼實現方式,一種為直接編碼的utf-16(be/le),其位元組碼數值直接對應相應的unicode碼,不可變長,始終為2位元組,字符集只囊括基本字元面。

3,utf-8為可變長編碼方式。單位元組代表ascii碼。可以變為2,3,4位元組長。使用該編碼方式需要按照相應規則解碼成相應的unicode碼。

字型相關:

字型儲存了每個字的顯示引數。字型分編碼方式,如假設gbk的0xa2 0xa3代表的是"三"這個字,但是unicode裡面同乙個碼值代表的卻可能是"部"這個字.所以每種字型都只可能對應一種編碼,除非是相容的

問題:1,我指定控制台為美國的**頁(擴充套件ascii),為何仍然能顯示中文檔名。

字元編碼相關總結

1 一位元組byte 8位元bit,so,一位元組能表示的最大的整數就是255 二進位制 1111 1111 2 最早ascii編碼,用乙個位元組byte來表示127個字元,包括 大小寫英文本母,數字,一些符號 3 中國gb2312編碼 加入中文的編碼。與此同時,各國有對應編碼。多國語言就會導致亂碼...

字元編碼相關總結

場景1 在html中定義表單submit form,通過js中的 submit form ajaxsubmit提交表單,但是在後端收到表單提交的中文顯示亂碼。前段部分 如下 test.html form id insterfestivals form method post br p label f...

字符集編碼相關

bom byte order mark 位元組序標記,bom的作用有兩個,一是標記文字的編碼型別,二是標記文字編碼的位元組序,文字檔案的最開頭都會有bom標記 windows預設編碼是ansi,不帶bom utf 8 3byte ef bb bf utf 16 be 2byte fe ff utf ...