溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

為什么idea輸出會亂碼

發(fā)布時間:2021-10-26 13:53:12 來源:億速云 閱讀:229 作者:iii 欄目:web開發(fā)

這篇文章主要介紹“為什么idea輸出會亂碼”,在日常操作中,相信很多人在為什么idea輸出會亂碼問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”為什么idea輸出會亂碼”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

 前言

亂碼這個東西相信大家都遇到過,今天我的女朋友三歪就火急火燎的上來找我:“親愛的,我的idea怎么輸出亂碼了?”

我一頓操作就給他搞好了,但是三歪不愧是我的女朋友,好奇心跟我是一樣樣的,隨我。

為什么idea輸出會亂碼

那為什么會出現(xiàn)亂碼呢?

什么是編碼,什么是解碼?

什么是字符碼,什么是字符集?

為什么要有 Unicode ?UTF-8 和 GBK 又有什么不同呢?

三歪坐在我的腿上對我撒嬌似的說出這一連串的問題,我這個人寵粉但是更寵女朋友,所以就有了這篇文章。

為什么會出現(xiàn)亂碼我們知道計算機里存儲的只會是 0 和 1  組成的字節(jié)流,而僅是數(shù)字滿足不了我們的需求,我們還需要文本的處理等等,但是計算機只認識數(shù)字,所以我們需要告訴計算機什么數(shù)字代表什么字符。

比如我指定 0000 代表 A,0001 代表 B 這樣計算機就知道了,所以我要把 AB 這兩個字符存入計算機的話,實際存儲的就是0000  0001,其實就等于把每個字符定制一個唯一的編碼。

但是這是我的指定,不同的人想法是不同的,比如小明就喜歡 1000 表示 A ,1111 表示 B,那小明的計算機按照他指定的編碼方式存儲,就是 1000  1111,之后傳輸給我的計算機,我拿到1000 1111,按照我的編碼解出來可能就是 %& 了,這就亂碼了。

所以亂碼的本質(zhì)就是編碼和解碼實現(xiàn)沒對應上。

有些同學可能對編碼和解碼的概念不太熟悉,我來解釋一下:

  • 編碼:其實就是將字符按照一定的格式轉(zhuǎn)換成字節(jié)流的過程。

  • 解碼:就是將字節(jié)流解析成字符。

可以看到隨意編碼的就會產(chǎn)生各自的計算機都無法正確解析的情況,所以需要有一個標準,大家都按那個標準來指定字符和數(shù)字的對應關系。

標準字符編碼

美國國家標準協(xié)會 ANSI 就制定了一個標準,即美國信息交換標準代碼(ASCII),規(guī)定了常用字符集的集合和對應的數(shù)字編號,例如 65 表示  A。

為什么idea輸出會亂碼

ASCII 實際上是 7 位編碼,用二進制代碼表示就是 0000000~1111111,不過 1 個字節(jié)是 8 位,所以一般都用 8 位來存儲??梢钥吹? ASCII 代表了 128 個字符,這其實是傾美國的編碼,你看同樣講英文的英國,ASCII 上都沒英鎊的標記。

還有人家的韓文,日文等等,更別說咱們中文了。

1 個字節(jié)最多只能表示 256 個字符,所以對我們來說不夠用,因此需要擴展,像 GB2312  就是我們國家標準總局發(fā)布的《信息交換用漢字編碼字符集》,后來又發(fā)布了 GBK ,這個 K 就是擴展的意思,在 GB2312  的基礎上又添加了很多比如繁體字等字符。

所以說等于每個國家都有自己的標準,因為語言都是不同的,各字符集的不同就導致計算機之間文檔的交流非常困難,因此大家又開始了一波標準化。

像美國的 ANSI 組織制定了 ANSI 標準字符編碼,其實就是制定平臺默認的編碼,比如中國的操作系統(tǒng)就用 GBK ,如果是美國就用  ASCII,操作系統(tǒng)會預裝這些標準字符集。

不過這只能解決一份文檔一份字符編碼的情況,假設我文檔里面有日語、法語、德語、俄語、中文,你說怎么辦?

Unicode

所以又搞了個 Unicode,又稱統(tǒng)一碼、萬國碼、單一碼。

Unicode 字符集涵蓋了目前人類使用的所有字符,并為每個字符進行統(tǒng)一編號,分配唯一的字符碼,你看這種事情總得有人做,不然就沒法統(tǒng)一。

這里有幾個術(shù)語我解釋一下,讓大伙更加清晰一些。

  • 字符:其實就像英文字母,或者我們的中文都叫字符

  • 字符集:那就是字符和編號對應的集合

  • 字符碼:就是字符集里面字符對應的數(shù)字,或者說編號,比如在 ASCII 字符集里面, A 的字符碼是 65

  • 字符編碼:就是按照字符集中字符和數(shù)字的映射關系,轉(zhuǎn)化成字節(jié)流的實現(xiàn)

對于 Unicode 而言有一點和之前的編碼不太一樣,它將字符集和編碼實現(xiàn)解耦了。

之前的編碼比如 ASCII 編碼、GBK  編碼等等,它們的字符集和編碼實現(xiàn)是綁死的,你可以理解成以前的編碼其實就是查表,有一個固定的表格里面存儲這字符和對應固定的二進制,比如 A 對應的編號是  65,其二進制序列就是 01000001。

而 Unicode 不一樣,它將字符集和字符編碼實現(xiàn)分開了,比如 A 對應的編號是 65,但是對應的二進制序列就不一定了,得看具體的字符編碼,如果是  UTF-8 編碼,則是 01000001,如果是 UTF-16 編碼(大端),則是 00000000 01000001。

為什么idea輸出會亂碼

這其實也是為什么我們現(xiàn)在常用 UTF-8 而不是 UTF-16 的原因,可以看到 UTF-16 編碼存儲效率較低,最少使用兩個字節(jié),并且像 C  語言的很多函數(shù)都會將 0x00 字節(jié)作為字符串的停止符來解析,所以才搞了個 UTF-8,其使用 1~4  字節(jié)為每個字符編碼,是變長的,具體如何編碼的我就不說了,隨便查一下就有。

到此,關于“為什么idea輸出會亂碼”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI