引言
想必大家之前一定 會被字元編碼困惑。ascii,gb2312,unicode,gb18030等等,或者說大家遇到過檔案亂碼問題。那麼這一系列的編碼到底是什麼?他們之間又會有什麼區別?又為什麼產生亂碼問題?
大家應該知道,我們現在的計算機都是二進位制,在通俗的來講,就是01構成!那麼問題來了。我們人類交流的主要方式是語言,而語言往往是由大量的符號構成的,所以很自然的就會想到使用二進位制編碼,對應到指定的符號,即乙個唯一的編碼對應乙個唯一的符號。在這裡說兩個概念;
細心的讀者可能有所發現,沒錯,上面的那些ascii等,都有自己的字符集和字元編碼,其中字元編碼就一一對應自己字符集內的所有內容
當初計算機是在美國流行起來的,所以當他們考慮計算機顯示文字的問題時,想到的肯定只有字母。於是乎,ascii(americanstandardcode forinformationinterchange,美國資訊交換標準**)編碼便呼之欲出。
下圖便是ascii表(數字**和符號的對應關係)
在ascii中規定:乙個位元組所對應乙個符號。在計算機中,乙個位元組包含8位,乙個位元組所能表示的不同狀態也只有:256個(
) 。就像上圖:符號a,所對應的數字編碼為:0100 0001。
但是需要注意的是在ascii字符集中,只有128個符號,因此ascii內,128的對應關係。其中前32個符號,是非顯示字元(計算機顯示)。
隨著計算機的發展到歐洲,由於歐洲人們也有著自己的語言,於是就對ascii進行了拓展,把剩下的128個也建立了對應關係,來表示歐洲地區的字元,並命名為:eascii
聰明的各位可能就就要問了,歐洲,美洲都把256個對應關係都用光了,我們大中國怎麼辦?我們博大精深的文字如何表示?此時此刻,gb***x字符集&編碼就誕生了!(這裡的x僅代表數字)。
gb開頭的就是我們中國的字元編碼。gb就是國標的首字母大寫。下面的圖是2312的對應規則。
具體規則:
在gb2312中規定:兩
個位元組所對應乙個符號。
q:為什麼ascii乙個位元組表示,而gb2312用兩個符號表示?
a:親,因為咱們的字多呀!兩個位元組可以有65536個對應狀態(
可能又要有人問了,不同國家的字元編碼不同,那麼如何保證資訊的準確性?如果我在中國寫好的文件,跑到美國去,那我的文件豈不是要亂了?其實在unicode沒有出世之前的確是這個樣子的。隨著網際網路的出現,全世界的人們都在用自己的語言去共享著資訊,如果所使用編碼不統一,勢必會產生亂碼的情況的。
那麼只有乙個解決方式:將世界上所有的文字都去遵循同一種編碼方式。這個方法看樣子是不是很難實現?但是他已經被unicode去實現了,所以unicode是乙個很偉大的編碼方式;
unicode(中文:萬國碼、國際碼、統一碼、單一碼)是電腦科學領域裡的一項業界標準。它對世界上大部分的文字系統進行了整理、編碼,使得電腦可以用更為簡單的方式來呈現和處理文字。說人話就是:將世界上所有的符號都納入其中,並且都有與之對應的關係;
(最新的unicode14.0編碼規範要在2023年3月發布,由於疫情故推遲到2023年9月發表。)
在unicode值得注意的是:unicode僅僅規範了符號的編碼方式,但是對於儲存的方式並沒有對此說明。
因為有的符號僅需要乙個位元組,有的需要多個位元組。比如,漢字嚴
的 unicode 是十六進製制數4e25
,轉換成二進位制數足足有15位(100111000100101
),也就是說,這個符號的表示至少需要2個位元組。表示其他更大的符號,可能需要3個位元組或者4個位元組,甚至更多。如果全都以:四個位元組去儲存,由於較小值的編碼點一般使用頻率較高,直接使用unicode編碼效率低下,大量浪費記憶體空間。utf-8就是來解決這個問題的。即解決unicode儲存問題。(後面的8就是以8位為單元進行編碼)
utf-8的編碼規範:
1)對於單位元組的符號,位元組的第一位設為0
,後面7位為這個符號的 unicode 碼。因此對於英語字母,utf-8 編碼和 ascii 碼是相同的。2)對於
n
位元組的符號(n > 1
),第乙個位元組的前n
位都設為1
,第n + 1
位設為0
,後面位元組的前兩位一律設為10
。剩下的沒有提及的二進位制位,全部為這個符號的 unicode 碼。至此,計算機表示語言的方式(即編碼規範)基本大勢已定,絕大多數都是unicode編碼,utf-8儲存。從此以後互聯時代得到了飛速發展。全世界人們儘管語言不同,但是表示語言的方式完全統一!使得全球互聯,世界互惠,人們互通!故此致敬各位前輩在字元編碼上所付出的努力!
ascii,unicode 和 utf-8 by阮一峰的網路日誌
utf-8 by維基百科
字符集和字元編碼 by吳秦
Wpf中顯示Unicode字元
今天在寫乙個小工具,裡面有些字元用unicode字元表示更合適。但是一時之間卻不知道怎麼寫了。經過一番查詢,終於找到了辦法。記到這裡,一是加深印象,二則以備查詢。比如 其unicode編碼是0x0025,在c 中如下表示 var percentage u0025 注意,表示方法是 u unicode...
Mathtype 公式顯示方框
公式編輯器mathtype中一些符號顯示方框,如何解決呢?出現這個問題的原因是這是因為windows中的mtextra.ttf 顯示為mt extra truetype 字型檔案不存在或版本太低,解決方法如下 1,檢視windows資料夾下的fonts中是否有mtextra.ttf 顯示為mt ex...
Unicode編碼字元的點陣顯示
對於unicode編碼的字元,可以先將unicode編碼轉換為gbk編碼,然後利用gbk點陣字型檔 gbk.bin 顯示字元。乙個比較好的編碼轉換方法是,製作乙個按照unicode編碼順序排列的gbk編碼表,直接根據unicode編碼就可以查到對應的gbk編碼,具體的製作方法如下 上以篇文章中已經製...