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

Java字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK具體實(shí)現(xiàn)

 更新時間:2023年11月21日 11:10:44   作者:zhangjunli  
在Java程序中字符串默認(rèn)的編碼方式是UTF-16編碼,因此需要將GBK編碼轉(zhuǎn)換為UTF-8編碼,主要是為了避免出現(xiàn)亂碼的情況,這篇文章主要給大家介紹了關(guān)于Java字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK具體實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下

Java UTF-8轉(zhuǎn)GBK詳解

java跟python類似的做法,在java中字符串的編碼是java修改過的一種Unicode編碼,所以看到j(luò)ava中的字符串,心理要默念這個東西是java修改過的一種Unicode編碼的編碼。

package string;
import java.nio.charset.Charset;
public class UTF82GBK {
    public static void main(String[] args) throws Exception {
        //系統(tǒng)的默認(rèn)編碼是GBK
        System.out.println("Default Charset=" + Charset.defaultCharset());
        String t = "hfjkds中國中國中國中國中國中國中國中國中國中國中國中國中國中國中國中國中國中國中國中國hfsdkj<img src=‘sasa‘ /> fjldsajflkdsjaflkdsjalf <img src=‘sada‘ ait=‘‘/>sfdsfadas";  
        //思路:先轉(zhuǎn)為Unicode,然后轉(zhuǎn)為GBK
        String utf8 = new String(t.getBytes( "UTF-8"));
        //等同于:
//        String utf8 = new String(t.getBytes( "UTF-8"),Charset.defaultCharset());
        System.out.println(utf8);  
        String unicode = new String(utf8.getBytes(),"UTF-8");   
        //等同于:
//        String unicode = new String(utf8.getBytes(Charset.defaultCharset()),"UTF-8");   
        System.out.println(unicode);  
        String gbk = new String(unicode.getBytes("GBK"));  
        //等同于:
//        String gbk = new String(unicode.getBytes("GBK"),Charset.defaultCharset());  
        System.out.println(gbk);  
    }
}
package com.mkyong;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class UTF8ToGBK {
    public static void main(String[] args) throws Exception {
        File fileDir = new File("/home/user/Desktop/Unsaved Document 1");
        BufferedReader in = new BufferedReader(new InputStreamReader(
                new FileInputStream(fileDir), "UTF-8"));
        String str;
        while ((str = in.readLine()) != null) {
            System.out.println(str);// java內(nèi)部只有unicode編碼 所以str是unicode編碼
            String str2 = new String(str.getBytes("GBK"), "GBK");// str.getBytes("GBK")是gbk編碼,但是str2是unicode編碼
            System.out.println(str2);
        }
        in.close();
    }
}

 問題的關(guān)鍵是new String(xxx.getBytes("gbk"), "gbk")這句話是什么意思,xxx.getBytes("gbk")得到的數(shù)組編碼是GBK,因此必須必須告訴java:我傳給你的數(shù)組是gbk編碼的,你在轉(zhuǎn)換成你內(nèi)部的編碼的時候記得要進(jìn)行一些處理,new String(xxx.getBytes("gbk"), "gbk"),這句話第二個“gbk”是告訴java傳遞給它的是gbk編碼的字符串。

String fullStr = new String(str.getBytes("UTF-8"), "UTF-8");//正常
String fullStr2 = new String(str.getBytes("UTF-8"), "GBK");//不正常,java內(nèi)置的編碼->utf8  被當(dāng)成GBK編碼轉(zhuǎn)換成java內(nèi)置的編碼

看一下jdk文檔是怎么說的

public String(byte[] bytes,
      Charset charset)

Constructs a new String by decoding the specified array of bytes using the specified charset.

那現(xiàn)在的問題就是,我怎么在String中持有GBK編碼的東西呢?

String str3 = new String(str.getBytes("GBK"),"ISO-8859-1");
System.out.println(new String(str3.getBytes("ISO-8859-1"),"GBK"));

Java GBK轉(zhuǎn)UTF-8詳解

Java語言是一種編程語言,它是一個高級的、面向?qū)ο蟮?、平臺無關(guān)的語言。Java主要是用來構(gòu)建Web應(yīng)用程序,而在Java Web應(yīng)用程序中將字符串編碼變成UTF-8是非常有必要的。在本文中,我們將從多個方面詳細(xì)探討Java GBK轉(zhuǎn)UTF-8。

一、轉(zhuǎn)換原理

GBK編碼和UTF-8編碼是兩種不同的編碼格式。GBK編碼是一種多字節(jié)編碼方式,每個漢字占用兩個字節(jié)存儲,因此在文本處理中經(jīng)常遇到GBK編碼轉(zhuǎn)UTF-8編碼的需求。UTF-8編碼是一種字符編碼方式,與ASCII碼兼容,可以支持從U+0000至U+10FFFF范圍內(nèi)的所有字符。

在Java程序中,字符串默認(rèn)的編碼方式是UTF-16編碼,因此需要將GBK編碼轉(zhuǎn)換為UTF-8編碼,主要是為了避免出現(xiàn)亂碼的情況。通過Java的相關(guān)API來實(shí)現(xiàn)將GBK編碼轉(zhuǎn)換為UTF-8編碼。

二、具體實(shí)現(xiàn)

1.使用InputStreamReader和OutputStreamWriter轉(zhuǎn)換文件編碼

FileInputStream fileInputStream = new FileInputStream("gbk.txt");
    InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "GBK");
    FileOutputStream fileOutputStream = new FileOutputStream("utf-8.txt");
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8");
    int length = 0;
    char[] buffer = new char[1024];
    while ((length = inputStreamReader.read(buffer)) != -1) {
        outputStreamWriter.write(buffer, 0, length);
    }
    outputStreamWriter.close();
    fileOutputStream.close();
    inputStreamReader.close();
    fileInputStream.close();

上述代碼中,先使用FileInputStream和InputStreamReader讀取GB2312編碼的文件,然后再使用FileOutputStream和OutputStreamWriter將文件以UTF-8編碼寫入到新的文件中。

2.使用String.getBytes()方法轉(zhuǎn)換字符串編碼

String strGBK = "這是一段GBK編碼的字符串";
    byte[] bytes = strGBK.getBytes("GBK");
    String strUTF = new String(bytes,"UTF-8");
    System.out.println(strUTF);

上述代碼中,我們先定義了一個字符串strGBK,將其轉(zhuǎn)換成字節(jié)數(shù)組bytes,并指定編碼方式為GBK。接著,通過String構(gòu)造方法將字節(jié)數(shù)組bytes以UTF-8編碼方式構(gòu)建新的字符串strUTF,并進(jìn)行輸出。

3.使用編碼轉(zhuǎn)換器Charset實(shí)現(xiàn)編碼轉(zhuǎn)換

String strGBK = "這是一段GBK編碼的字符串";
    Charset gbkCharset = Charset.forName("GBK");
    Charset utf8Charset = Charset.forName("UTF-8");
    ByteBuffer byteBuffer = gbkCharset .encode(strGBK);
    CharBuffer charBuffer = utf8Charset .decode(byteBuffer);
    System.out.println(charBuffer.toString());

上述代碼中,我們首先定義一個字符串strGBK,然后通過Charset的forName方法分別創(chuàng)建GBK編碼和UTF-8編碼的Charset,并使用GBK編碼器將字符串轉(zhuǎn)換成ByteBuffer,再通過UTF-8解碼器將ByteBuffer轉(zhuǎn)換成CharBuffer,最后輸出轉(zhuǎn)換后的字符串。

三、注意事項(xiàng)

在進(jìn)行GB2312到UTF-8編碼轉(zhuǎn)換時,需要注意以下幾點(diǎn):

1.文本文件編碼格式

在Java程序中,使用FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream等類進(jìn)行文件讀寫時,需要明確文件的編碼格式,否則會出現(xiàn)亂碼等問題。

2.源代碼文件編碼格式

為了保證源代碼文件編碼格式的一致性,最好將所有的源文件均保存為UTF-8編碼,否則可能會出現(xiàn)編譯錯誤等問題。

3.字符串編碼格式

在Java程序中,如果需要將字符串從GBK編碼轉(zhuǎn)換成UTF-8編碼,需要使用String的getBytes()方法,同時指定源編碼和目標(biāo)編碼。

四、總結(jié)

本文詳細(xì)介紹了Java GBK轉(zhuǎn)UTF-8的具體實(shí)現(xiàn)方法,包括文件編碼轉(zhuǎn)換、字符串編碼轉(zhuǎn)換和使用字符集Charset實(shí)現(xiàn)編碼轉(zhuǎn)換。在進(jìn)行GB2312到UTF-8編碼轉(zhuǎn)換時,需要注意文本文件編碼格式、源代碼文件編碼格式和字符串編碼格式的一致性。

到此這篇關(guān)于Java字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java UTF-8互轉(zhuǎn)GBK內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析

    shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析

    今天小編就為大家分享一篇關(guān)于shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • JAVA時間類型轉(zhuǎn)換處理方式

    JAVA時間類型轉(zhuǎn)換處理方式

    本文詳細(xì)介紹了Java中LocalDate與Date類型之間的轉(zhuǎn)換方法,以及字符串格式化與解析技巧,同時,還涵蓋了LocalDateTime和LocalTime與Date類型的轉(zhuǎn)換,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Intellij IDEA實(shí)現(xiàn)SpringBoot項(xiàng)目多端口啟動的兩種方法

    Intellij IDEA實(shí)現(xiàn)SpringBoot項(xiàng)目多端口啟動的兩種方法

    有時候使用springboot項(xiàng)目時遇到這樣一種情況,用一個項(xiàng)目需要復(fù)制很多遍進(jìn)行測試,除了端口號不同以外,沒有任何不同。遇到這種情況怎么辦呢?這時候可以使用Intellij IDEA解決
    2018-06-06
  • java批量修改文件名的實(shí)現(xiàn)方法

    java批量修改文件名的實(shí)現(xiàn)方法

    這篇文章主要介紹了 java批量修改文件名的實(shí)現(xiàn)方法的相關(guān)資料,實(shí)現(xiàn)批量修改文件下的所有文件的文件名,具有一定的參考價值,需要的朋友可以參考下
    2017-07-07
  • Java?Optional的判空操作詳解

    Java?Optional的判空操作詳解

    JAVA在1.8版本推出Optional,官方文檔將其描述為可能包含或不包含非空值的容器對象,目前Optional用于避免程序出現(xiàn)異常NullPointerException,感興趣的可以了解一下
    2022-09-09
  • SpringBoot3.x整合Nacos和Redis全過程

    SpringBoot3.x整合Nacos和Redis全過程

    本文詳細(xì)介紹了使用IntelliJ IDEA創(chuàng)建Spring Boot項(xiàng)目并配置Nacos、Redis和日期類LocalDateTime的步驟,還展示了如何使用Docker安裝Nacos并進(jìn)行基本的測試
    2025-12-12
  • SpringCloud大文件分片斷點(diǎn)上傳實(shí)現(xiàn)原理

    SpringCloud大文件分片斷點(diǎn)上傳實(shí)現(xiàn)原理

    這篇文章主要介紹了SpringCloud大文件分片斷點(diǎn)上傳實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • java對象轉(zhuǎn)成byte數(shù)組的3種方法

    java對象轉(zhuǎn)成byte數(shù)組的3種方法

    這篇文章主要為大家詳細(xì)介紹了java對象轉(zhuǎn)成byte數(shù)組的3種方法,具有一定的參考價值,感興趣的朋友可以參考一下
    2018-06-06
  • SpringBoot3基于 Sa-Token 實(shí)現(xiàn) API 接口簽名校驗(yàn)實(shí)戰(zhàn)

    SpringBoot3基于 Sa-Token 實(shí)現(xiàn) API 接口簽名校驗(yàn)實(shí)戰(zhàn)

    本文介紹了基于Spring Boot 3和Sa-Token框架實(shí)現(xiàn)API接口簽名校驗(yàn)的解決方案,通過sa-token-sign模塊提供開箱即用的簽名校驗(yàn)功能,下面就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2025-12-12
  • 詳解Spring Cloud Zuul中路由配置細(xì)節(jié)

    詳解Spring Cloud Zuul中路由配置細(xì)節(jié)

    本篇文章主要介紹了詳解Spring Cloud Zuul中路由配置細(xì)節(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論

洛隆县| 岳普湖县| 丹寨县| 五原县| 绍兴市| 平和县| 津南区| 深圳市| 和平区| 綦江县| 溧阳市| 资兴市| 司法| 文安县| 南城县| 北海市| 松溪县| 揭东县| 交口县| 大英县| 防城港市| 武山县| 保康县| 随州市| 麟游县| 靖边县| 陇南市| 马边| 当涂县| 盐城市| 邮箱| 长兴县| 凤山市| 正镶白旗| 台南县| 潜江市| 手机| 济南市| 台湾省| 大石桥市| 中方县|