最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中字符編碼格式詳解

 更新時間:2016年03月24日 08:56:00   作者:leesf  
在java應用軟件中,會有多處涉及到字符集編碼,有些地方需要進行正確的設置,有些地方需要進行一定程度的處理。本文主要給大家講解java中字符的編碼格式等相關問題

一、前言

  在分析Comparable和Comparator的時候,分析到了String類的compareTo方法,String底層是用char[]數組來存放元素,在比較的時候是比較的兩個字符串的字符,字符用char來存儲,此時,突然想到,Java里面的char可以存放中文嗎?后來發(fā)現是可以的,并且由此也引出了Java中字符的編碼格式問題。

二、Java存儲格式

  在Java中,如下代碼獲取了字符'張'的各種編碼格式。

import java.io.UnsupportedEncodingException;
public class Test {
 public static String getCode(String content, String format) throws UnsupportedEncodingException {
  byte[] bytes = content.getBytes(format);
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < bytes.length; i++) {
   sb.append(Integer.toHexString(bytes[i] & 0xff).toUpperCase() + " ");
  }
  
  return sb.toString();
 }
 public static void main(String[] args) throws UnsupportedEncodingException {
  System.out.println("gbk : " + getCode("張", "gbk"));
  System.out.println("gb2312 : " + getCode("張", "gb2312"));
  System.out.println("iso-8859-1 : " + getCode("張", "iso-8859-1"));
  System.out.println("unicode : " + getCode("張", "unicode"));
    System.out.println("utf-16 : " + getCode("張", "utf-16"));
  System.out.println("utf-8 : " + getCode("張", "utf-8"));
  }
}

  運行結果:

gbk : D5 C5 
gb2312 : D5 C5 
iso-8859-1 : 3F 
unicode : FE FF 5F 20 
utf-16 : FE FF 5F 20 
utf-8 : E5 BC A0 

  說明:從結果我們可以知道,字符'張'的gbk與gb2312編碼是相同的,unicode與utf-16編碼時相同的,但是其iso-8859-1、unicode、utf-8編碼都是不相同的。那么,在JVM中,字符'張'是按照哪種編碼格式進行存儲的呢?下面開始我們的分析。

三、探秘思路

 1. 查看.class文件常量池的存儲格式

  測試代碼如下  

public class Test {
 public static void main(String[] args) {
  String str = "張";  
 }
}

  使用javap -verbose Test.class進行反編譯,發(fā)現常量池情況如下:

  再使用winhex打開class文件,發(fā)現字符'張'在常量池的存儲如下

  說明:上面兩張可以在class文件中是以utf-8的格式存儲的。

  但是在運行時是否是utf-8格式呢?繼續(xù)我們的探秘之旅。

  2. 在程序中一探究竟

  使用如下代碼 

public class Test { 
 public static void main(String[] args) {
  String str = "張";
  System.out.println(Integer.toHexString(str.codePointAt(0)).toUpperCase());
 }
}

  運行結果:

5F20

  說明:根據結果我們知道在運行時JVM是使用的utf-16格式進行存儲,utf-16一般是使用2個字節(jié)進行存儲,如果遇到兩個字節(jié)無法表示的字符則會使用4個字節(jié)表示。之后會另外有篇幅進行介紹,并且我們查看Character類源碼時,會發(fā)現就是使用的utf-16進行編碼的,從兩面都找到了我們想要的答案。

  3. char類型可以存放中文嗎?

  根據上面的探索我們已經知道了Java的class文件中字符是以utf-8進行編碼的,在JVM運行時則是以utf-16進行編碼存儲的。而字符'張'可以用兩個字節(jié)來表示,而char在Java中也是兩個字節(jié),故可以存放。

四、總結

  經過上面的分析,我們知道:

  1. 字符在class文件中是以utf-8格式進行編碼的,而在JVM運行時是采用utf-16格式進行編碼的。

  2. char類型是兩個字節(jié),可以用來存放中文。

  在此次調用的過程中又查閱了好多關于字符方面的資料,受益匪淺,并且發(fā)現特別有意思,接下來會進行分享,所以特此預告下一篇將會進一步來介紹編碼以及編碼在Java中的問題。敬請期待

相關文章

  • java tostring方法重寫代碼示例

    java tostring方法重寫代碼示例

    這篇文章主要介紹了java tostring方法重寫代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • 在mybatis中去除多余的前綴或者后綴操作

    在mybatis中去除多余的前綴或者后綴操作

    這篇文章主要介紹了在mybatis中去除多余的前綴或者后綴操作。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • SpringBoot集成PDFBox實現電子簽章的代碼詳解

    SpringBoot集成PDFBox實現電子簽章的代碼詳解

    Apache PDFBox 是一個開源的 Java 庫,用于處理 PDF 文檔,它提供了一系列強大的功能,包括創(chuàng)建、渲染、拆分、合并、加密、解密 PDF 文件,以及從 PDF 中提取文本和元數據等,本文給大家介紹了SpringBoot集成PDFBox實現電子簽章,需要的朋友可以參考下
    2024-09-09
  • Java文本編輯器實現方法詳解

    Java文本編輯器實現方法詳解

    這篇文章主要介紹了Java文本編輯器實現方法,結合實例形式詳細分析了java文本編輯器結構、原理、布局、實現步驟與相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • java項目依賴包選擇具體實現類示例介紹

    java項目依賴包選擇具體實現類示例介紹

    這篇文章主要為大家介紹了java項目依賴包選擇具體實現類示例介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • java實現隨機生成UUID

    java實現隨機生成UUID

    這篇文章主要介紹了java實現隨機生成UUID的函數代碼,有需要的小伙伴可以參考下。
    2015-07-07
  • IDEA下創(chuàng)建SpringBoot+MyBatis+MySql項目實現動態(tài)登錄與注冊功能

    IDEA下創(chuàng)建SpringBoot+MyBatis+MySql項目實現動態(tài)登錄與注冊功能

    這篇文章主要介紹了IDEA下創(chuàng)建SpringBoot+MyBatis+MySql項目實現動態(tài)登錄與注冊功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 解讀controller層,service層,mapper層,entity層的作用與聯(lián)系

    解讀controller層,service層,mapper層,entity層的作用與聯(lián)系

    這篇文章主要介紹了關于controller層,service層,mapper層,entity層的作用與聯(lián)系,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java-synchronized 嵌套使用代碼詳解

    java-synchronized 嵌套使用代碼詳解

    本文以synchronized 的同步造成了死鎖為例,介紹了java-synchronized 嵌套使用代碼詳解,同時對鎖和死鎖的概念進行了說明,需要的朋友可以了解下。
    2017-09-09
  • java中匿名內部類詳解

    java中匿名內部類詳解

    這篇文章主要對java中的匿名內部類的詳細總結,需要的朋友可以參考下
    2017-04-04

最新評論

伊通| 育儿| 扎囊县| 金溪县| 盐津县| 易门县| 宁南县| 本溪市| 阳曲县| 铜川市| 佛学| 子长县| 满洲里市| 徐水县| 岐山县| 顺昌县| 古交市| 灵山县| 鹤山市| 泸溪县| 胶南市| 新安县| 石台县| 白水县| 治多县| 仪陇县| 高碑店市| 临高县| 颍上县| 石棉县| 阿拉善右旗| 曲沃县| 灌阳县| 南平市| 耒阳市| 龙江县| 新兴县| 密山市| 团风县| 娄底市| 五指山市|