欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IO流:java中解碼和編碼出現(xiàn)亂碼說明以及代碼實現(xiàn)方法

 更新時間:2023年11月03日 11:10:59   作者:飛翔的佩奇  
最近使用Java編寫一些讀取文件的小工具的時候,經(jīng)常與IO流打交道,但是自己對IO流的理解不是特別深刻,趁機整理下,這篇文章主要給大家介紹了關(guān)于IO流:java中解碼和編碼出現(xiàn)亂碼說明以及代碼實現(xiàn)的相關(guān)資料,需要的朋友可以參考下

一、UTF-8和GBK編碼方式

  • 如果采用的是UTF-8的編碼方式,那么1個英文字母 占 1個字節(jié),1個中文占3個字節(jié)
  • 如果采用GBK的編碼方式,那么1個英文字母 占 1個字節(jié),1個中文占2個字節(jié)

二、idea和eclipse的默認編碼方式

其實idea和eclipse的默認編碼方式是不一樣的哦。

idea默認的編碼方式是:UTF-8

eclipse默認采用的編碼方式是GBK

三、解碼和編碼方法

1、java中編碼的方法

  • public byte[] getBytes() 使用默認的編碼方式進行編碼
  • public byte[] getBytes(Charset charset) 使用指定方式進行編碼

2、java中解碼的方法

  • public String(byte bytes[]) 使用默認的方式進行解碼
  • public String(byte bytes[], String charsetName) 使用指的方式進行解碼

四、代碼實現(xiàn)

以下代碼demo均采用idea開發(fā)哦

編碼

1、使用默認的編碼方式進行編碼看下面這段代碼,請猜一猜數(shù)組中的元素有幾個?

package com.heima.demo;

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
        String str = "dk你好";
        byte[] bytes = str.getBytes();
        System.out.println(Arrays.toString(bytes));
    }
}

你答對了嗎?數(shù)組中一共有8個元素,因為idea默認采用的編碼方式是utf-8,如果采用的是UTF-8的編碼方式,那么1個英文字母 占 1個字節(jié),1個中文占3個字節(jié)。我們看一下運行結(jié)果

[100, 107, -28, -67, -96, -27, -91, -67]

Process finished with exit code 0

如果使用指定的編碼方式GBK進行編碼呢?我們看一下代碼

public class TestDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "dk你好";
        byte[] bytes = str.getBytes("gbk");
        System.out.println(Arrays.toString(bytes));
    }
}

答案是:數(shù)組元素一共有6個,因為采用的是GBK編碼方式,那么1個英文字母 占 1個字節(jié),1個中文占2個字節(jié)。

我們看一下運行結(jié)果

[100, 107, -60, -29, -70, -61]

Process finished with exit code 0

解碼

1、使用默認的方式進行解碼

package com.heima.demo;

import java.io.UnsupportedEncodingException;

public class TestDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "dk你好";
        byte[] byte1 = str.getBytes();
        String res1 = new String(byte1);
        System.out.println(res1);
    }
}

運行結(jié)果如下:

dk你好

Process finished with exit code 0

如果給他加上指定編碼方式呢?

package com.heima.demo;

import java.io.UnsupportedEncodingException;

public class TestDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "dk你好";
        byte[] byte1 = str.getBytes();
        String res1 = new String(byte1,"gbk");
        System.out.println(res1);
    }
}

運行結(jié)果

dk浣犲ソ

Process finished with exit code 0

我們發(fā)現(xiàn)有亂碼產(chǎn)生。那為什么呢?因為編碼的時候,采用的是默認的utf-8方式,所以解碼的時候,也需要使用utf-8進行解碼,如果使用gbk就會產(chǎn)生亂碼。因為utf-8和gbk對中文所占的字節(jié)數(shù)是不一樣的。

  • 如果采用的是UTF-8的編碼方式,那么1個英文字母 占 1個字節(jié),1個中文占3個字節(jié)
  • 如果采用GBK的編碼方式,那么1個英文字母 占 1個字節(jié),1個中文占2個字節(jié)

五、額外知識擴展

1、什么是字符集?字符集顧名思義,就是用來裝多個字符的集合。不同的字符集中字符的個數(shù)是不同的,包含的字符也是不同的,甚至對于字符的編碼格式也是不同的。

2、什么是字符編碼?計算機中存儲信息都是以二進制數(shù)表示的,而我們在電腦屏幕上看到的文字、數(shù)字、英文、標點符號等都是將二進制數(shù)轉(zhuǎn)換過后的結(jié)果,按照某種規(guī)則,將計算機中的二進制數(shù)與某個抽象字符集合一一對應(yīng),這就是字符編碼。

3、ASCII字符集ASCII 全稱 (American Standard Code for Information Interchange)美國信息交換標準代碼,它是基于拉丁字母的一套電腦編碼系統(tǒng),其最初在創(chuàng)建的時候主要是為了顯示英語以及一些西歐語言,是國際通用的信息交換使用標準碼。ASCII使用了7位二進制來表示128個字符和符號,目前已經(jīng)停止更新。

4、Unicode字符集ASCII字符集只包含了128個字符,對于全世界的所有語言來說,并不能容納下世界上所有的語言。所以Unicode字符集出現(xiàn)了。
Unicode又被稱為統(tǒng)一碼、萬國碼,是國際組織制定的用來容納全世界字符的編碼方案。是的,確切的說Unicode是一種編碼方案,以實現(xiàn)跨語言、跨平臺的文本處理、轉(zhuǎn)換的要求。

但是Unicode只是一種字符與二進制數(shù)之間的一種邏輯映射編碼,它并沒有指定在計算集中應(yīng)該如何的進行存儲。所以此時就需要一種編碼格式用來指定Unicode字符集中的字符是如何進行編碼的。

在Unicode官方資料中,Unicode編碼方式有三種:UTF-8、UTF-16、UTF-32,而其中UTF-8編碼成為了現(xiàn)今互聯(lián)網(wǎng)使用較多的編碼方式。

5、GB2312GB2312編碼是第一個漢字編碼國家標準,于1980年由中國國家標準總局發(fā)布。其中共收錄了漢字6763個。但是由于我國的漢字非常多,GB2312收錄的漢字不夠用了,所以GBK誕生了。GBK包含了GB2312的所有內(nèi)容的同時還新增了20000多新的漢字,對于一些日常需求已經(jīng)為完全夠用了。

總結(jié)

到此這篇關(guān)于java中解碼和編碼出現(xiàn)亂碼說明以及代碼實現(xiàn)的文章就介紹到這了,更多相關(guān)java解碼和編碼亂碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot整合spring-boot-starter-data-elasticsearch的過程

    Springboot整合spring-boot-starter-data-elasticsearch的過程

    本文詳細介紹了Springboot整合spring-boot-starter-data-elasticsearch的過程,包括版本要求、依賴添加、實體類添加、索引的名稱、分片、副本設(shè)置等,同時,還介紹了如何使用ElasticsearchRepository類進行增刪改查操作
    2024-10-10
  • Spring Data JPA 簡單查詢--方法定義規(guī)則(詳解)

    Spring Data JPA 簡單查詢--方法定義規(guī)則(詳解)

    下面小編就為大家?guī)硪黄猄pring Data JPA 簡單查詢--方法定義規(guī)則(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java單元測試Powermockito和Mockito使用總結(jié)

    Java單元測試Powermockito和Mockito使用總結(jié)

    公司單元測試框架選用了Junit 4.12,Mock框架選用了Mockito和PowerMock,本文主要介紹了Java單元測試Powermockito和Mockito使用總結(jié),感興趣的可以了解一下
    2021-09-09
  • 關(guān)于@Value注入List,Map及設(shè)置默認值問題

    關(guān)于@Value注入List,Map及設(shè)置默認值問題

    這篇文章主要介紹了@Value注入List,Map及設(shè)置默認值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java實現(xiàn)俄羅斯方塊游戲的示例代碼

    Java實現(xiàn)俄羅斯方塊游戲的示例代碼

    俄羅斯方塊是一個最初由阿列克謝帕吉特諾夫在蘇聯(lián)設(shè)計和編程的益智類視頻游戲。本文將利用Java實現(xiàn)這一經(jīng)典的小游戲,感興趣的可以動手試一試
    2022-03-03
  • SpringBoot的攔截器中依賴注入為null的解決方法

    SpringBoot的攔截器中依賴注入為null的解決方法

    這篇文章主要介紹了SpringBoot的攔截器中依賴注入為null的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 實例講解使用Spring通過JPA連接到Db2

    實例講解使用Spring通過JPA連接到Db2

    這篇文章主要介紹了通過實例講解使用Spring通過JPA連接到Db2,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,下面我們來一起學習一下吧
    2019-06-06
  • java排序去重示例分享

    java排序去重示例分享

    這篇文章主要介紹了java排序去重示例,對String strs = "ZZZ BBB AAA OOO ZZZ AAA ZZZ"計算出現(xiàn)個數(shù),排序去重,需要的朋友可以參考下
    2014-02-02
  • Java經(jīng)典排序算法之插入排序代碼實例

    Java經(jīng)典排序算法之插入排序代碼實例

    這篇文章主要介紹了Java經(jīng)典排序算法之插入排序代碼實例,插入排序是一種最簡單直觀的排序算法,它的工作原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入,需要的朋友可以參考下
    2023-10-10
  • SpringBoot實現(xiàn)短鏈接系統(tǒng)的使用示例

    SpringBoot實現(xiàn)短鏈接系統(tǒng)的使用示例

    由于短鏈接可能涉及到用戶隱私和安全問題,所以短鏈接系統(tǒng)也需要符合相關(guān)的數(shù)據(jù)保護和安全標準,本文主要介紹了SpringBoot實現(xiàn)短鏈接系統(tǒng)的使用示例,感興趣的可以了解一下
    2023-09-09

最新評論