為什麼這樣的字符集就是一系列用於顯示的字元的集合。ascii字符集由美國國家標準協會(american national standard institute)於2023年制定乙個字元對映集合。json會解析失敗?
為什麼介面上韓文顯示亂碼?
ascii和ansi有什麼區別?
相信不少人在字元編碼上面摔過跟頭,這篇文章針對開發中需要了解的字元編碼知識進行了簡要的講解,希望能夠對大家有所幫助。
ascii使用7位二進位制位來表示乙個字元,總共可以表示128個字元(即2^7
,二進位制000 0000 ~ 111 1111
十進位制0~127
)。
ascii字符集中每個數字對應乙個唯一的字元,如下表:
因為其對應關係非常簡單,不需要特殊的編碼規則,所以嚴格來講ascii不能算字元編碼,因為它沒有規定編碼規則。我們只是習慣將ascii字符集稱之為ascii碼、ascii編碼。
ascii字符集是美國人發明的,這些字元完全是為其量身定製的。但隨著計算機技術的發展和普及,傳到了歐洲(如法國、德國)各國。由於歐洲很多國家中使用的字元除了ascii表中的128個字元之外,還有一些各國特有的字元,於是歐洲人民發現ascii字符集表達不了他們所要表達的東西呀。怎麼辦了?他們發現ascii只使用了乙個位元組(8位)之中的低7位,於是歐洲各國開始各顯神通,打起了那1個最高位(第0位)的主意,將最高位利用了起來,這樣又多了128個字元,從而滿足了歐洲人民的需要。
但因為每個國家的需求不一樣,各國都設計了不同的方案。為了結束這種混亂的局面,國際標準化組織(iso)及國際電工委員會(iec)聯合制定了一系列8位字符集的標準,統稱為iso 8859(全稱iso/iec 8859)。注意,這是一系列字符集的統稱。如iso/iec 8859-1(也就是常聽到的latin-1)支援西歐語言,iso/iec 8859-4(latin-4)支援北歐語言等。
我們在資料庫中常見到的latin-1、2、5、7其實就是上面提到的針對特定語言的ascii擴充套件字符集。前面講到了,歐洲各國有效利用閒置的最高位,對ascii字符集進行了擴充套件。可是歐洲人民沒有想到的是(當然他們也不用想這麼多),在大洋彼岸有著乙個擁有五千年歷史的偉大民族,她擁有著成千上萬的漢字,1個位元組顯然不夠表達如此深厚的文化底蘊。
於是當計算機引入到中國之初,國家技術監督局就設計了gb系列編碼方案(gb=guo biao)。
gb編碼方案使用2個位元組來表達乙個漢字。同時為了相容ascii編碼,規定各個位元組的最高位(首位)必須為1,從而避免了和最高位為0的ascii字符集的衝突。
gb系列字符集經歷下面的幾個發展過程:
編碼名稱
發布時間
位元組數漢字範圍
gb2312
2023年
變位元組(ascii 1位元組,漢字2個位元組)
6763個漢字
gb13000
2023年第一版
變位元組(ascii 1位元組,漢字2個位元組)
20902個漢字
gbkwindows95中
2個位元組
21886個漢字和圖形符號(含gb2312,big5中所有字元)
gb18030
2023年第一版
變位元組(ascii 1位元組,漢字2個或4個位元組)
27484個漢字
每一次迭代,支援的字元數量都會增加,而且每一次迭代都會保留之前版本支援的編碼,所以做到了向上相容。
因為漢字在顯示器上的顯示寬度要比英文本元的寬度要寬一倍,在一起排版顯示時不太美觀。所以gb編碼不僅僅加入了漢字字元,而且包括了ascii字符集中本來就有的數字、標點符號、字母等字元。這些被編入gb編碼的數字、標點、字母在顯示器上的顯示寬度比ascii字符集中的寬度寬一倍,所以前者稱為全形字符,後者稱為半形字元。
前面說到了世界各國針對ascii的擴充套件方案(如歐洲的iso/iec 8859,中國的gb系列等),這些ascii擴充套件編碼方案的特點是:他們都相容ascii編碼,但他們彼此之間是不相容的。微軟將這些編碼方案統稱為ansi編碼。故ansi並不是特指某一種編碼方案,只有知道了在哪個國家,哪個語言環境下,它表示具體的編碼方案。
在windows作業系統上,預設使用ansi來儲存檔案。那麼作業系統是如何知道ansi到底應該表示哪種編碼了,是gbk,還是ascii,或者還是euc-kr了? windows通過乙個叫"code page"(翻譯為中文就叫**頁)的東西來判斷系統的預設編碼。
簡體中文作業系統預設的**頁是936,它表示ansi使用的是gbk編碼。
gb18030編碼對應的windows**頁為cp54936。
可以使用命令chcp
來檢視系統預設的**頁:
漢字"
撥開字元編碼的迷霧 字元編碼轉換
撥開字元編碼的迷霧 字元編碼概述 撥開字元編碼的迷霧 編譯器如何處理檔案編碼 撥開字元編碼的迷霧 字元編碼轉換 本文介紹使用windows api進行字元編碼的轉換,涉及widechartomultibyte和multibytetowidechar2個api,api介面名中的multibyte對應著...
撥開字元編碼的迷霧 字元編碼轉換
撥開字元編碼的迷霧 字元編碼概述 撥開字元編碼的迷霧 編譯器如何處理檔案編碼 撥開字元編碼的迷霧 字元編碼轉換 撥開字元編碼的迷霧 mysql資料庫字元編碼 本文介紹使用windows api進行字元編碼的轉換,涉及widechartomultibyte和multibytetowidechar2個a...
撥開字元編碼的迷霧 編譯器如何處理檔案編碼
使用visual studio建立的c 工程可以在工程屬性配置屬性 常規中配置字符集 使用unicode字符集 預設 使用多位元組字符集。這個設定項不對字元編碼產生直接的影響 注意這裡的 直接 二字,第3節會說到 只會在工程屬性配置屬性 c c 預處理器加入相應的巨集 使用unicode字符集 un...