国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價(jià)值的文章主要介紹了IO流:java中解碼和編碼出現(xiàn)亂碼說明及代碼實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、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
IO流:java中解碼和編碼出現(xiàn)亂碼說明及代碼實(shí)現(xiàn),IO流,java,IO流,解碼,編碼,數(shù)組,GBK,UNICODE
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)行編碼
看下面這段代碼,請(qǐng)猜一猜數(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));
    }
}

你答對(duì)了嗎?數(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對(duì)中文所占的字節(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é)

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

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

2、什么是字符編碼?
計(jì)算機(jī)中存儲(chǔ)信息都是以二進(jìn)制數(shù)表示的,而我們?cè)陔娔X屏幕上看到的文字、數(shù)字、英文、標(biāo)點(diǎn)符號(hào)等都是將二進(jìn)制數(shù)轉(zhuǎn)換過后的結(jié)果,按照某種規(guī)則,將計(jì)算機(jī)中的二進(jìn)制數(shù)與某個(gè)抽象字符集合一一對(duì)應(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è)字符和符號(hào),目前已經(jīng)停止更新。

4、Unicode字符集
ASCII字符集只包含了128個(gè)字符,對(duì)于全世界的所有語言來說,并不能容納下世界上所有的語言。所以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、GB2312
GB2312編碼是第一個(gè)漢字編碼國家標(biāo)準(zhǔn),于1980年由中國國家標(biāo)準(zhǔn)總局發(fā)布。其中共收錄了漢字6763個(gè)。但是由于我國的漢字非常多,GB2312收錄的漢字不夠用了,所以GBK誕生了。GBK包含了GB2312的所有內(nèi)容的同時(shí)還新增了20000多新的漢字,對(duì)于一些日常需求已經(jīng)為完全夠用了。文章來源地址http://www.zghlxwxcb.cn/news/detail-713454.html

到了這里,關(guān)于IO流:java中解碼和編碼出現(xiàn)亂碼說明及代碼實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java - 將base64編碼解碼成圖片

    Java - 將base64編碼解碼成圖片

    為了方便測試,我們可以使用一個(gè)圖片編碼網(wǎng)站,將圖片進(jìn)行base64編碼 解密的代碼如下 因?yàn)閳D片的Base64字符串非常大,動(dòng)輒幾百K,所以不能直接使用 String base64 = \\\"${該圖片的base64串}\\\" 進(jìn)行測試,否則編譯器會(huì)報(bào)錯(cuò) Java \\\"constant string too long\\\" compile error\\\" 。這個(gè)錯(cuò)誤的出現(xiàn),是因

    2023年04月09日
    瀏覽(28)
  • 辨析Java與網(wǎng)絡(luò)通信中的編碼與解碼

    編碼(在Java字符流中) :當(dāng)我們將字符數(shù)據(jù)寫入字符流時(shí),Java會(huì)根據(jù)我們指定的字符集(如UTF-8、ISO-8859-1等)將字符轉(zhuǎn)換為相應(yīng)的字節(jié)序列。這個(gè)過程就是編碼。Java的 Writer 類及其子類負(fù)責(zé)執(zhí)行這個(gè)編碼過程。 解碼(在Java字符流中) :當(dāng)我們從字符流中讀取字符數(shù)據(jù)時(shí),

    2024年03月10日
    瀏覽(18)
  • 【通信原理實(shí)驗(yàn)】基于A律13折線的PCM編碼與解碼(附完整代碼)

    【通信原理實(shí)驗(yàn)】基于A律13折線的PCM編碼與解碼(附完整代碼)

    一、實(shí)驗(yàn)原理 PCM,Pulse Code Modulation(脈沖編碼調(diào)制),即把從模擬信號(hào) 抽樣、量化、編碼 成為二迚制符號(hào)的基本過程, 稱為脈沖編碼調(diào)制。 模擬信號(hào)的數(shù)字化過程: 1、抽樣 – 時(shí)間離散 :時(shí)間連續(xù)的信號(hào) - 時(shí)間離散、幅度連續(xù)的信號(hào); ? 抽樣定理(香農(nóng)采樣定律、奈奎

    2024年02月08日
    瀏覽(22)
  • 【文件IO操作】Java代碼實(shí)現(xiàn),文件與IO,文件類型,文件代碼操作,文件操作案例

    【文件IO操作】Java代碼實(shí)現(xiàn),文件與IO,文件類型,文件代碼操作,文件操作案例

    前言: 大家好,我是 良辰丫 ,今天我將與大家一起學(xué)習(xí)文件操作的相關(guān)操作,跟隨我的步伐,一起往下看!?????? ??個(gè)人主頁:良辰針不戳 ??所屬專欄:javaEE初階 ??勵(lì)志語句:生活也許會(huì)讓我們遍體鱗傷,但最終這些傷口會(huì)成為我們一輩子的財(cái)富。 ??期待大家三連,關(guān)注,

    2023年04月18日
    瀏覽(20)
  • 解決IntelliJ IDEA 代碼運(yùn)行時(shí)中文出現(xiàn)亂碼

    解決IntelliJ IDEA 代碼運(yùn)行時(shí)中文出現(xiàn)亂碼

    在我們剛接觸到IDEA時(shí),想美滋滋的敲一個(gè)“hello world”來問候這個(gè)世界,但難免會(huì)遇到這種問題 亂碼!亂碼!亂碼! ?內(nèi)心的崩潰就在一瞬間,下面我就來分享幾個(gè)實(shí)用的解決方法 首先最重要的一點(diǎn),假如你安裝的是JDK20等版本,最好的建議是換成JDK17,然后再更改idea里的

    2024年02月13日
    瀏覽(14)
  • Java對(duì)URL進(jìn)行編碼和解碼的兩種方法

    1.使用java.net.URLEncoder和java.net.URLDecoder類 上述代碼中,使用URLEncoder.encode方法將URL進(jìn)行編碼,指定編碼方式為UTF-8,生成編碼后的URL字符串。使用URLDecoder.decode方法將編碼后的URL字符串進(jìn)行解碼,指定解碼方式為UTF-8,生成解碼后的URL字符串。 2.使用java.nio.charset.StandardCharsets和

    2024年02月11日
    瀏覽(21)
  • java程序出現(xiàn)亂碼的原因

    Java程序出現(xiàn)亂碼的原因有以下幾種可能 : 編碼不一致 :Java程序使用的編碼與當(dāng)前系統(tǒng)或其他應(yīng)用程序使用的編碼不一致,導(dǎo)致字符無法正確顯示。 字符集不支持 :Java程序使用的字符集不支持某些特殊字符或語言,導(dǎo)致這些字符無法正確顯示。 數(shù)據(jù)庫編碼不一致 :Java程

    2024年02月08日
    瀏覽(18)
  • FFMpeg 實(shí)現(xiàn)視頻解碼、編碼、轉(zhuǎn)碼流程詳解

    FFMpeg 實(shí)現(xiàn)視頻解碼、編碼、轉(zhuǎn)碼流程詳解

    打開FFmpeg源碼,會(huì)發(fā)現(xiàn)有一系列l(wèi)ibavxxx的模塊,這些模塊很好地劃分了代碼的結(jié)構(gòu)和分工。 libavformat,format,格式封裝 libavcodec,codec,編碼、解碼 libavutil,util,通用音視頻工具,像素、IO、時(shí)間等工具 libavfilter,filter,過濾器,可以用作音視頻特效處理 libavdevice,device,設(shè)備

    2024年02月11日
    瀏覽(20)
  • 如和使用matlab實(shí)現(xiàn)香農(nóng)編碼和解碼

    如和使用matlab實(shí)現(xiàn)香農(nóng)編碼和解碼

    在網(wǎng)上看了好多 , 都是對(duì)香農(nóng)進(jìn)行編碼的案例 , 卻沒有 進(jìn)行解碼的操作 , 今天就來補(bǔ)齊這個(gè)欠缺 定義一個(gè)字符串類型的變量text,其值為’你好’。 調(diào)用函數(shù)shannonCoding對(duì)文本信息進(jìn)行編碼,并將編碼、解碼、平均碼長和編碼效率作為四個(gè)返回值保存到變量encoded, decoded, avgC

    2024年02月08日
    瀏覽(13)
  • Java使用UTF-8或GBK編碼后還是亂碼的問題

    大家在開發(fā)中可能經(jīng)常遇到將String字符串轉(zhuǎn)為byte[]的場景,為了避免中文亂碼,一般指定字符集為GBK或UTF-8來進(jìn)行編碼以及解碼,但是如果使用不當(dāng),同樣會(huì)造成字符集亂碼問題。 主要原因是進(jìn)行編碼以及解碼的字符集不一致導(dǎo)致 所以,在解決字符集亂碼問題時(shí)一般情況下會(huì)

    2024年02月15日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包