JAVA學習冊|字符編碼|GBK(二)

2021-02-19 java技術大本營

上一節我們點到GBK的轉換,在知識點中,我們提到了十六進位,還有String的byte存儲方式,今天我們來繼續探究GBK相關的知識點

先說兩句

任何一個知識點到底層之後,總是比較頭疼的,但是我們要首先有一個清晰的思路和方向,如GBK , 在寫這個系列文章之前,我也僅僅知識他是一種編碼方式,我也和大家一樣,這樣邊寫邊研究,從已知出發,大膽假設,小心求證明。

從已知出發,GBK是一種編碼方式,兩個字節的編碼,一個碼對應一個中文字符。順著這個思路,我們找到了GBK.java 這個類,裡面做了字符的映射關係,然後在裡面,我們看到了 DoubleByte.java這個類,通過這個類名,我們可以猜測,這是做編碼和解碼的實現類。不僅僅是對GBK,而是對所有的雙字節的編碼都會有這些實現,我們只需要把映射關係傳給這個DoubleByte就可以了

如下圖所示:

通過b2c的映射,反過來初始化c2b的映射

編碼和編碼也都先初始化,然後再把映射關係傳遞DoubleByte來操作。

所以順著這個思路,我們就可以點進去源碼看看是怎麼一回事了。

同樣,順著這個思路,其他的雙字節編碼應該也是這樣的,這個就留給各位小夥伴來擴展啦

附加知識點

先上一波代碼鎮文章

String s = "術";       byte[] gbks = s.getBytes("GBK");       System.out.println(gbks.toString());       System.out.println(Integer.toBinaryString(-54));       System.out.println(Integer.toBinaryString(-11));       System.out.println(Integer.parseInt("11001010",2));       System.out.println(Integer.parseInt("11110101",2));       System.out.println(Integer.toHexString(202));       System.out.println(Integer.toHexString(245));       System.out.println(Integer.parseInt("caf5", 16));

Integer.toHexString 是把一個十進位數用16進位表示

Integer.parseInt 是把一個二進位數轉成10進位

Integer.toBinaryString  這裡是把一個整數按補碼的形式輸出

我知道很多小夥伴看推文時很少拿代碼去運行,只看博主的解釋,這樣很容易被帶到坑裡面去的,所以,這裡,包括以後小刀的文章,會儘量把思路寫下來,但運行和找結論還是要交給各位小夥伴了。

然後 術  這個字的GBK編碼就是51957 .

我知道很多小夥伴看推文時很少拿代碼去運行,只看博主的解釋,這樣很容易被帶到坑裡面去的,所以,這裡,包括以後小刀的文章,會儘量把思路寫下來,但運行和找結論還是要交給各位小夥伴了。

Integer.toBinaryString  這裡是把一個整數按補碼的形式輸出

Integer.parseInt 是把一個二進位數轉成10進位

Integer.toHexString 是把一個十進位數用16進位表示

小夥伴們可以順著這個思路,一步步的往下梳理這個關係,有什麼新發現,歡迎在下面留言給小刀哦

-

插播一條:

主題討論第三期來啦,本期主題討論的主題是,IO,本期的不同之處就是,發言會存檔,和個人微信號綁定,後續可以生成自己的知識網絡圖!來吧,各位小夥伴們!詳情請點擊下面的閱讀原文


相關焦點

  • 你了解java中的幾種編碼方式?解決亂碼問題可能並不麻煩
    前言編碼的轉換通常在IO機制中使用,一個好的編碼可以為我們節省很多空間,在某種程度上提高我們應用的效率。由於之前就知道String中的轉換方式,還有一些工具類,因此今天就好好的整理一下java中jdk提供的幾種轉換方式,希望對你有幫助。
  • Python3 是如何解決棘手的字符編碼問題的?
    首先,Python3 把系統默認編碼設置為 UTF-8>>> import sys>>> sys.getdefaultencoding()'utf-8'>>>然後,文本字符和二進位數據區分得更清晰,分別用 str 和 bytes 表示。
  • python字符的編碼與解碼
    什麼是字符編碼計算機裡面是由各種電子電路組成的,它是如何識別我們的寫的字符的,比如hello ,你,我。直接識別是不可能,它只能識別 二進位的0,1字符。所有我們輸入進去的字符,最終都會被轉化成0,1這種組合在一起的一串數字。
  • 【MySQL】UTF-8編碼轉換gbk編碼
    ·······························································································································今天學習了
  • 【Python基礎】(6.1)字符編碼
    目錄一 引入二 知識儲備三、字符編碼介紹3.1 什麼是字符編碼?無論存取都是涉及到字符編碼問題#1、存文本文件人類通過文本編輯器輸入的字符會被轉化成ASCII格式的二進位存放於內存中,如果需要永久保存,則直接將內存中的ASCII格式的二進位寫入硬碟#2、讀文本文件直接將硬碟中的ASCII格式的二進位讀入內存,然後通過ASCII表反解成英文字符圖2圖
  • 雲計算開發學習筆記:Python3編碼 - TechWeb
    關於Python3的編碼類型是怎樣的,首先我們需要明白的是計算機只能識別0、1這種二進位的信息。Python3默認編碼為Unicode,由str類型進行表示,二進位數據使用byte類型表示。Python3編碼類型關於各種編碼類型,目前的文字編碼標準主要有 ASCII、GB2312、GBK、Unicode等。ASCII 編碼是最簡單的西文編碼方案。GB2312、GBK、GB18030 是漢字字符編碼方案的國家標準。ISO/IEC 10646 和 Unicode 都是全球字符編碼的國際標準 。Python3默認編碼為Unicode。
  • 跟我學java編程—認識java語言的字符類型
    另外還經常會遇到需要存儲並操縱字符型數據的情況。例如:計算數值表達式時,需要存儲運算符,這時需要一種可以存儲單個字符數據的數據類型。Java語言提供了一種char數據類型,可以滿足存儲單個字符的需要。Java語言中,char佔2個字節的存儲空間,即可以存儲英文字符,也可以存儲單個漢字,一個漢字編碼也佔2個字節的存儲空間。
  • JAVA學習之路(總結)--基礎篇二
    喵~~~~喵~~~~喵~~~~先說一個題外話~~~大家學習java一方面是為了興趣,當然另一方更想著賺更多的Money吧,嘿嘿嘿~就深圳來講,Java程式設計師薪資水平一般如下:應屆生:普通5K左右,能力強8K左右;1年工作經驗:普通8K,能力強1W+;2年工作經驗:普通9K,能力強1.2W+;3年工作經驗:普通1.5W+,
  • Java中文亂碼解決之道:字符編碼詳解
    一、基礎知識在了解各種字符集之前我們需要了解一些最基礎的知識,如:編碼、字符、字符集、字符編碼基礎知識。編碼計算機中存儲的信息都是用二進位表示的,我們在屏幕上所看到文字、圖片等都是通過二進位轉換的結果。
  • python入門教程06-01(python語法入門之字符編碼)
    人在與計算機交流的時候,用的都是人類能讀懂的字符,如中文字符、英文字符、日文字符等毫無疑問,由人類的字符到計算機中的數字,必須經歷一個過程,計算機所識別出來的文字都是二進位的0011等等,所以此次課程講的是字符編碼的介紹和如何深刻認識字符編碼?一 引入字符串類型、文本文件的內容都是由字符組成的,但凡涉及到字符的存取,都需要考慮字符編碼的問題。
  • Java實現全形和半角字符相互轉換
    跟著我從0學習JAVA、spring全家桶和linux運維等知識,帶你從懵懂少年走向人生巔峰,迎娶白富美!每一篇文章都是心得總結,跟我學習你就是大牛!Java實現全形和半角字符相互轉換1 中文全形和半角輸入的區別      在計算機屏幕上,一個漢字要佔兩個英文字符的位置,人們把一個英文字符所佔的位置稱為」半角」,相對地把一個漢字所佔的位置稱為」全形」。
  • 《Google的Java編碼規範》(Google Java Style)在線地址
    Google最近發布了一份完整的Java編碼規範。規範的內容包括一些切實可行的硬性規定。Google內部均遵守此規範。該規範不僅涵蓋了代碼格式,還包括其他類型的約定和編碼標準。 Google最近發布了一份完整的Java編碼規範。規範的內容包括一些切實可行的硬性規定。
  • Python 編碼為什麼那麼蛋疼?
    str 到 unicode 之間的轉換用哪 decode 還是 encode 方法還特不好記,老是混淆,問題究竟出在哪裡?為了弄清楚這個問題,我決定從 python 字符串的構成以及字符編碼的細節上進行深入淺出的分析字節與字符計算機存儲的一切數據,文本字符、圖片、視頻、音頻、軟體都是由一串01的字節序列構成的,一個字節等於8個比特位。而字符就是一個符號,比如一個漢字、一個英文字母、一個數字、一個標點都可以稱為一個字符。
  • Python中字符串編碼在二進位之間相互轉換的方法
    ,關注我,一同學習簡單易懂的Python編程。第八十節:字符串編碼轉換在學習「計算字符串的長度」(詳見第72節內容str表示Unicode字符,就是包括ASCII碼、utf-8碼、GBK碼、GB2312碼之類的編碼;bytes表示的則是二進位數據,其中包括了編碼的文本。
  • Oracle基礎學習(01)-字符函數
    substrc:按Unicode編碼, substr2:按UCS2編碼, substr4:按UCS4編碼。#舉例:如:substr('String',1,3) 表示從第1位(含)開始截取3位。 substr(str,n):n>0,對字符串str從第n位開始截取至最後一位。      substr(str,-n,m):n,m>0。
  • Python 編碼錯誤的本質原因
    從 ASCII 碼說起說到字符編碼,要從計算機的誕生開始講起,計算機發明於美國,在英語世界裡,常用字符非常有限,26個字母(大小寫)、10個數字、標點符號、控制符,這些字符在計算機中用一個字節的存儲空間來表示綽綽有餘,因為一個字節相當於8個比特位,8個比特位可以表示256個符號。
  • 一文讀懂 Java 字符串相關知識點和常見面試題
    new byte[]{} : str.getBytes();}/** * 把字符串轉為二進位碼<br/> * 本方法不會返回null * * @param str 需要轉換的字符串 * @param charset 編碼類型 * @return 二進位字節碼數組
  • stm32CubeIDE如何修改文檔編碼,來解決文本注釋亂碼問題
    菜單:編輯-&gt;設置編碼2.在彈出的窗口中,選擇其他,然後手動輸入"gbk"這3個字符即可,然後點擊ok確定選擇其他,然後手動輸入&quot;gbk&quot;這3個字符選擇其他,然後手動輸入&quot;gbk&quot;這3個字符3.接下來就是見證奇蹟的時刻了.所有的注釋都變成了中文漢字,可以非常清晰地進行分辨了.
  • 【C++】搞懂char與wchar_t字符串
    在windows下,char*的字符串編碼是多字節,用的本地編碼,就是我們的GBK。linux下char*直接就是utf8,所以兩個平臺char*字符串直接交流是不行的。。。1.2. 字符數組對於str5這種字符數組,因為末尾沒有0,所以把他當作字符串直接輸出就會有內存裡其他數據,就出現了「燙」。。
  • 第十課 計算機中字符的編碼
    這一課主要介紹計算機中字符的編碼和漢字編碼以及計算機語言字符編碼        由於計算機的內部是以二進位數的形式進行存儲、運算、識別和處理的,因此,在計算機中,數據(如1、2、3、4、5、6、7、8)、字母(如A\B