日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机编码问题

發布時間:2024/4/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机编码问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、二進制,位,字節、字符

我們都知道,在計算機內部,數據都是以二進制的形式存儲,所有的信息最終都表示為一個由0和1組成的字符串,每一個二進制位都是只有0或者1兩種狀態,每一個0或者0稱為位(bit),然后規定每八個二進制位為一個單位,為一個字節(byte),現在可以明白了,位和字節都是內存的空間單位,或者說是計算機中數據量的計量單位,如 int 為32位,也可以說是4字節。

字符就是在計算機顯示器給我們顯示的一個個文字或者符號,比如:A。B、C,你,好,&,+等都是一個字符

二、編碼

剛才說的字符都是顯示給人看的,計算機是不能直接存儲字符的,那問題來的,計算機是怎么存儲字符的呢?

剛才已經說過,計算機是以二進制的形式存儲數據的,數據都是字符,存儲方式是二進制,那他們是怎么對應上的呢?

這種將字符對應成二進制的形式就是------編碼

例如:我們輸入A,計算機將1000001存進內存,而顯示時遇到1000001,就是在屏幕上顯示A,

其實編碼就是一個翻譯的過程,將人類的字符語言與計算機的二進制語言進行翻譯。

幾種編碼方式

ASCII編碼:

美國人發明的,一個字節是8位,每一位上有0或者1兩種情況,那一個字節就有256種不同的狀態,如果將256種不同的編碼對應一種字符,那就是256字符。老美需要表示的字符有128種,所以美國人發明了ASCII就是用256種種的128種規定了他們需要的字符:一下是常用的幾種

ASCII的缺陷就在于表示的字符太少,世界上有那么多的字符,他只表示了128種,顯然是不夠用的。

iso8859-1 :

1字節八位的所有組合有256種,剛才ASCII只使用其中的128種,而iso-8859-1是使用單字節編碼,范圍就是0——255;顯然ISO-8859-1表示的范圍也是非常的有限。但是ISO-8859-1使用的是單字節編碼,而計算機存儲也是以字節為單位,所以兩者對應關系是一致的,所以使用ISO-8859-1在計算機中是非常方便的,所以現在很多協議默認使用的就是ISO-8859-1編碼方式。雖然ISO-8859-1不能直接表示中文,但是他可以利用其它編碼方式表示中文,也就是將其他編碼的中文拆分成一個一個字節來表示,這一個個字節組合起來就是要表示的中文。

GB2312:

國標碼,專門用來表示漢字,是雙字節編碼,

規定:一個小于127的字符的意義與原來相同,但兩個大于127的字符連在一起時,就表示一個漢字,前面的一個字節(他稱之為高字節)從0xA1用到 0xF7,后面一個字節(低字節)從0xA1到0xFE,這樣我們就可以組合出大約7000多個簡體漢字了。在這些編碼里,我們還把數學符號、羅馬希臘的 字母、日文的假名們都編進去了,連在 ASCII 里本來就有的數字、標點、字母都統統重新編了兩個字節長的編碼,這就是常說的"全角"字符,而原來在127號以下的那些就叫"半角"字符了。

GBK :

GB2312 是對 ASCII 的中文擴展。 但是中國的漢字太多了,我們很快就就發現有許多人的人名沒有辦法在這里打出來,然后又對GB2312進行擴展,

原先規定兩個字節都是大于127的才表示一個中文,現在只要求第一個字節大于127,第二個字節可以小于127,這樣又多出來很多編碼,擴展之后的編碼方案被稱為 GBK 標準,GBK 包括了 GB2312 的所有內容,同時又增加了近20000個新的漢字(包括繁體字)和符號。

unicode :

很多地區都開始制定自己國家、自己語言的編碼方式,導致計算機的編碼方式不能夠統一,ISO (國際標誰化組織)的國際組織決定著手解決這個問題,重新搞一個包括了地球上所有文化、所有字母和符號 的編碼!他們打算叫它"Universal Multiple-Octet Coded Character Set",簡稱 UCS, 俗稱 "UNICODE"。 ISO 就直接規定必須用兩個字節,也就是16位來統一表示所有的字符。UNICODE 對于ASCII編碼不變,只是將其長度由原來的8位擴展為16位,比如字母a為"00 61"。 至此,計算機中不論英文還是中文都是兩個字節表示和存儲;顯然英文字符在計算機中造成了內存的浪費。

UTF

考慮到unicode編碼不兼容iso8859-1編碼,而且容易占用更多的空間:因為對于英文字母,unicode也需要兩個字節來表示。所以unicode不便于傳輸和存
儲。因此而產生了utf編碼,utf編碼兼容iso8859-1編碼,同時也可以用來表示所有語言的字符,不過,utf編碼是不定長編碼,每一個字符的長度從1-6個字
節不等。

UTF-8

互聯網的普及,強烈要求出現一種統一的編碼方式。UTF-8就是在互聯網上使用最廣的一種unicode的實現方式。其他實現方式還包括UTF-16和UTF-32,不過在互聯網上基本不用。重復一遍,這里的關系是,UTF-8是Unicode的實現方式之一。
UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度。
UTF-8的編碼規則很簡單,只有二條:
1)對于單字節的符號,字節的第一位設為0,后面7位為這個符號的unicode碼。因此對于英語字母,UTF-8編碼和ASCII碼是相同的。
2)對于n字節的符號(n>1),第一個字節的前n位都設為1,第n+1位設為0,后面字節的前兩位一律設為10。剩下的沒有提及的二進制位,全 部為這個符號的unicode碼。

下表總結了編碼規則,字母x表示可用編碼的位。
Unicode符號范圍 | UTF-8編碼方式
(十六進制) | (二進制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

?

package com.neuedu.demo01;import java.io.UnsupportedEncodingException;public class EncodeDemo01 {public static void main(String[] args) throws UnsupportedEncodingException {String string="你好Java";byte [] byte1=string.getBytes();//轉換成字節序列用的是項目的默認編碼UTF-8//UTF -8 中文占3個字節,英文占一個字節System.out.println("UTF-8");for (byte b : byte1) {//把字節轉換成int 以16進制的方式顯示System.out.print(Integer.toHexString(b& 0xff) + " ");}System.out.println();//GBK 中文占兩個字節,英文占一個字節byte [] byte2=string.getBytes("GBK");System.out.println("GBK");for (byte b : byte2) {//把字節轉換成int 以16進制的方式顯示System.out.print(Integer.toHexString(b& 0xff) + " ");}System.out.println();//java 是雙字節編碼 utf-16bebyte [] bytes3=string.getBytes("utf-16be");//utf-16be 中文英文都是占用兩個字節System.out.println("utf-16be");for (byte b : bytes3) {//把字節轉換成int 以16進制的方式顯示System.out.print(Integer.toHexString(b& 0xff) + " ");}System.out.println();/** 當你的字節序列是某種編碼時,當想把字節序列變成字符串時,也需要以這種編碼方式轉換* 通常所說的亂碼就是在轉換的時候讀和寫的編碼方式不一樣*/String str1=new String(bytes3);System.out.println("以項目默認編碼UTF-8讀取UTF-16be的字節:"+str1);String str2=new String(bytes3,"utf-16be");System.out.println("以UTF-16be編碼讀取UTF-16be的字節:"+str2);} }

結果:

?

?

參考資料:http://blog.csdn.net/chenjing502/article/details/38364911

????????????? http://blog.csdn.net/zj510/article/details/37877651

轉載于:https://www.cnblogs.com/Actexpler-S/p/7580818.html

總結

以上是生活随笔為你收集整理的计算机编码问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。