欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java中的編碼轉(zhuǎn)化方式都有哪些

這篇文章主要講解了“java中的編碼轉(zhuǎn)化方式都有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java中的編碼轉(zhuǎn)化方式都有哪些”吧!

創(chuàng)新互聯(lián)公司主營天峨網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app開發(fā)定制,天峨h5微信平臺小程序開發(fā)搭建,天峨網(wǎng)站營銷推廣歡迎天峨等地區(qū)企業(yè)咨詢

 

一、編碼轉(zhuǎn)換原理

 

1、為什么需要編碼

很早之前計算機(jī)存儲的就只是英文,一共26個英文字母。而且計算機(jī)存儲信息的最小單位是一個字節(jié)8位,能夠表示256個字符。這對于早起的英文來說足夠了。即使是加上一些常見符號也足夠。

后來隨著時間的發(fā)展,中國、日本等國的計算機(jī)也開始蓬勃發(fā)展,于是計算機(jī)不僅僅要存儲英文了,也開始存儲中文了。但是中文我們都知道幾萬個太多了,一個字節(jié)肯定放不下。怎么辦呢?一個字節(jié)表示不下,那就多用幾個字節(jié)就好了。這幾個字節(jié)在存儲的時候還要再轉(zhuǎn)化為bit,這時候就要涉及到編碼了。

 

2、編碼方式

計算中提供了多種編碼方式,常見的有 ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16 等。它們規(guī)定了轉(zhuǎn)化的規(guī)則,按照這個規(guī)則就可以讓計算機(jī)正確的表示我們的字符。

像GB2312、GBK、UTF-8、UTF-16等很多種方式都可以表示漢字,他們有什么區(qū)別呢?

(1)GB2312

它是雙字節(jié)編碼,總的編碼范圍是 A1-F7,其中從 A1-A9 是符號區(qū),總共包含 682 個符號,從 B0-F7 是漢字區(qū),包含 6763 個漢字。

(2)GBK

它的編碼范圍是 8140~FEFE(去掉 XX7F)總共有 23940 個碼位,它能表示 21003 個漢字。

(3)UTF-8

而 UTF-8 采用了一種變長技術(shù),每個編碼區(qū)域有不同的字碼長度。不同類型的字符可以是由 1~6 個字節(jié)組成。

 

3、轉(zhuǎn)碼方式

(1)IO流

這里就是面試問題的核心答案了,編碼的目的上面已經(jīng)說了,主要是字節(jié)和字符之間的轉(zhuǎn)化。既然涉及到字節(jié)和字符很容易我們就能想到j(luò)ava中的IO流。也就是說java中編碼的轉(zhuǎn)換其實就是IO流中的類來實現(xiàn)的。

java中的編碼轉(zhuǎn)化方式都有哪些

最核心的就是上面幾個類,當(dāng)然這里只是給出了輸入的一部分,還有一些輸出的類。

(2)String

String類中也提供了一些轉(zhuǎn)碼的方法。下面我們會通過實例來說明。為什么String可以實現(xiàn)呢?這是因為String底層保存的其實就是一個一個字節(jié),而且String還有方法直接轉(zhuǎn)化為字符。所以String肯定也能實現(xiàn)。

(3)Charset

這個Charset是javaNIO中的一個類,整個流程就是讀取數(shù)據(jù),然后轉(zhuǎn)化為byte,也就是字符。然后重新編碼成字符就OK了。

下面我們使用代碼來實現(xiàn)一下:

 

二、代碼實現(xiàn)

 

1、IO流

    public void convertionFile() throws IOException {
        File file = new File("D://fdd/java的架構(gòu)師技術(shù)棧.txt");
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader inReader = new InputStreamReader(fis, "gbk");
        FileOutputStream fos = new FileOutputStream(file);
        OutputStreamWriter outReader = new OutputStreamWriter(fos, "utf-8");
    }
   

2、String

    public void convertionString() throws UnsupportedEncodingException {
        String s = "java的架構(gòu)師技術(shù)棧";
        // 正常情況下轉(zhuǎn)碼的過程
        byte[] b = s.getBytes("gbk");// 編碼
        String sa = new String(b, "gbk");// 解碼
        System.out.println(sa);
        // 錯誤狀態(tài)下轉(zhuǎn)碼的過程
        b = sa.getBytes("utf-8");// 編碼
        sa = new String(b, "utf-8");// 解碼
        System.err.println(sa);
    }
   

3、Charset

    public void convertionCharset() throws IOException {
        Charset charset = StandardCharsets.UTF_8;
        // 從字符集中創(chuàng)建相應(yīng)的編碼和解碼器
        CharsetEncoder encoder = charset.newEncoder();
        CharsetDecoder decoder = charset.newDecoder();
        // 構(gòu)造一個buffer
        CharBuffer charBuffer = CharBuffer.allocate(64);
        charBuffer.put('A');
        charBuffer.flip();
        // 將字符序列轉(zhuǎn)換成字節(jié)序列
        ByteBuffer bb = encoder.encode(charBuffer);
        // 將字節(jié)序列轉(zhuǎn)換成字符序列
        bb.flip();
        CharBuffer cb = decoder.decode(bb);
    }

感謝各位的閱讀,以上就是“java中的編碼轉(zhuǎn)化方式都有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對java中的編碼轉(zhuǎn)化方式都有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

當(dāng)前標(biāo)題:java中的編碼轉(zhuǎn)化方式都有哪些
文章來源:http://chinadenli.net/article6/jgjoig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計企業(yè)網(wǎng)站制作外貿(mào)建站網(wǎng)站建設(shè)域名注冊網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)