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

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

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

一、UTF-8和GBK編碼方式

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

二、idea和eclipse的默認(rèn)編碼方式

其實(shí)idea和eclipse的默認(rèn)編碼方式是不一樣的哦。

idea默認(rèn)的編碼方式是:UTF-8

eclipse默認(rèn)采用的編碼方式是GBK

三、解碼和編碼方法

1、java中編碼的方法

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

2、java中解碼的方法

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

四、代碼實(shí)現(xiàn)

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

編碼

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

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個(gè)元素,因?yàn)閕dea默認(rèn)采用的編碼方式是utf-8,如果采用的是UTF-8的編碼方式,那么1個(gè)英文字母 占 1個(gè)字節(jié),1個(gè)中文占3個(gè)字節(jié)。我們看一下運(yùn)行結(jié)果

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

Process finished with exit code 0

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

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個(gè),因?yàn)椴捎玫氖荊BK編碼方式,那么1個(gè)英文字母 占 1個(gè)字節(jié),1個(gè)中文占2個(gè)字節(jié)。

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

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

Process finished with exit code 0

解碼

1、使用默認(rèn)的方式進(jìn)行解碼

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);
    }
}

運(yùn)行結(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);
    }
}

運(yùn)行結(jié)果

dk浣犲ソ

Process finished with exit code 0

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

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

五、額外知識擴(kuò)展

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • java?excel轉(zhuǎn)圖片常用的幾種方法對比及建議

    java?excel轉(zhuǎn)圖片常用的幾種方法對比及建議

    在Java開發(fā)中,借助報(bào)表插件能夠輕松實(shí)現(xiàn)將工作表、任意指定區(qū)域以及各種形狀類型轉(zhuǎn)換為圖片,這篇文章主要介紹了java?excel轉(zhuǎn)圖片常用的幾種方法對比及建議,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • Spring?@Bean?修飾方法時(shí)注入?yún)?shù)的操作方法

    Spring?@Bean?修飾方法時(shí)注入?yún)?shù)的操作方法

    對于 Spring 而言,IOC 容器中的 Bean 對象的創(chuàng)建和使用是一大重點(diǎn),Spring 也為我們提供了注解方式創(chuàng)建 bean 對象:使用 @Bean,這篇文章主要介紹了Spring?@Bean?修飾方法時(shí)如何注入?yún)?shù),需要的朋友可以參考下
    2023-10-10
  • java實(shí)現(xiàn)多客戶聊天功能

    java實(shí)現(xiàn)多客戶聊天功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多客戶聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Redis之GEO存儲(chǔ)地理位置信息的使用

    Redis之GEO存儲(chǔ)地理位置信息的使用

    在外賣軟件中的附近的美食店鋪、外賣小哥的距離,打車軟件附近的車輛,交友軟件中附近的小姐姐。我們都可以利用redis的GEO地理位置計(jì)算得出。本文就來詳細(xì)的介紹一下
    2021-10-10
  • Java中的BufferedInputStream與BufferedOutputStream使用示例

    Java中的BufferedInputStream與BufferedOutputStream使用示例

    BufferedInputStream和BufferedOutputStream分別繼承于FilterInputStream和FilterOutputStream,代表著緩沖區(qū)的輸入輸出,這里我們就來看一下Java中的BufferedInputStream與BufferedOutputStream使用示例:
    2016-06-06
  • 構(gòu)建Maven項(xiàng)目時(shí)可能遇到的問題

    構(gòu)建Maven項(xiàng)目時(shí)可能遇到的問題

    本篇是針對構(gòu)建 Maven 項(xiàng)目時(shí)可能出現(xiàn)的問題進(jìn)行總結(jié),并給出解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • JAVA把結(jié)果保留兩位小數(shù)的3種方法舉例

    JAVA把結(jié)果保留兩位小數(shù)的3種方法舉例

    在寫程序的時(shí)候,有時(shí)候可能需要設(shè)置小數(shù)的位數(shù),所以下面這篇文章主要給大家介紹了關(guān)于JAVA把結(jié)果保留兩位小數(shù)的3種方法,文章通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Java使用組件編寫窗口實(shí)現(xiàn)網(wǎng)絡(luò)圖片顯示

    Java使用組件編寫窗口實(shí)現(xiàn)網(wǎng)絡(luò)圖片顯示

    這篇文章主要為大家詳細(xì)介紹了Java使用組件編寫窗口實(shí)現(xiàn)網(wǎng)絡(luò)圖片顯示的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • SpringBoot使用PageHelper插件實(shí)現(xiàn)Mybatis分頁效果

    SpringBoot使用PageHelper插件實(shí)現(xiàn)Mybatis分頁效果

    這篇文章主要介紹了SpringBoot使用PageHelper插件實(shí)現(xiàn)Mybatis分頁效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-02-02
  • IDEA啟動(dòng)springboot項(xiàng)目報(bào)missing ServletWebServerFactory錯(cuò)誤的解決方案

    IDEA啟動(dòng)springboot項(xiàng)目報(bào)missing ServletWebServerFactory錯(cuò)誤的解決

    Spring Boot項(xiàng)目在IDEA中啟動(dòng)時(shí)報(bào)錯(cuò),經(jīng)過排查發(fā)現(xiàn)是由于Tomcat依賴的AprLifecycleListener類未被正確加載,通過將Tomcat依賴的scope從provided改為compile,解決了問題
    2025-12-12

最新評論

司法| 临江市| 东阳市| 新竹市| 嘉禾县| 平山县| 黄山市| 聂荣县| 新平| 泰和县| 江永县| 历史| 托克逊县| 凉山| 衢州市| 丰台区| 香格里拉县| 望都县| 新源县| 荣昌县| 尚志市| 天祝| 曲水县| 九江市| 娄烦县| 清新县| 临清市| 溧水县| 会东县| 永丰县| 黎平县| 闻喜县| 沙洋县| 图们市| 嵩明县| 河津市| 昭觉县| 徐汇区| 东平县| 凌源市| 遂溪县|