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

Java 字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK

這篇具有很好參考價值的文章主要介紹了Java 字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

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)部的編碼的時候記得要進行一些處理,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是非常有必要的。在本文中,我們將從多個方面詳細探討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來實現(xiàn)將GBK編碼轉(zhuǎn)換為UTF-8編碼。

二、具體實現(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,并進行輸出。

3.使用編碼轉(zhuǎn)換器Charset實現(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)換后的字符串。

三、注意事項

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

1.文本文件編碼格式

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

2.源代碼文件編碼格式

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

3.字符串編碼格式

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

四、總結(jié)

本文詳細介紹了Java GBK轉(zhuǎn)UTF-8的具體實現(xiàn)方法,包括文件編碼轉(zhuǎn)換、字符串編碼轉(zhuǎn)換和使用字符集Charset實現(xiàn)編碼轉(zhuǎn)換。在進行GB2312到UTF-8編碼轉(zhuǎn)換時,需要注意文本文件編碼格式、源代碼文件編碼格式和字符串編碼格式的一致性。文章來源地址http://www.zghlxwxcb.cn/news/detail-743559.html

到了這里,關(guān)于Java 字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 織夢GBK/GB2312轉(zhuǎn)utf-8編碼操作步驟(全站修改方法)

    目前MIP對編碼是有嚴(yán)格要求,必須是UTF-8,那么對于大部分GBK或者GB2312的用戶只能先將網(wǎng)站整體進行編碼轉(zhuǎn)換,才能進行MIP改造,不然改造后的頁面是亂碼一大片。 為什么MIP只支持utf-8?目前部分手機自帶瀏覽器僅支持UTF-8,打開GBK的網(wǎng)站會出現(xiàn)亂碼,所以為了手機的兼容性,

    2023年04月24日
    瀏覽(39)
  • 【Java】在代碼中設(shè)置輸出字符集為UTF-8

    今日無聊,來試試如何在 Java 代碼中更改輸出字符集。 其中我們要看的語句,其實只有一行 在設(shè)置Java程序的輸出字符集為UTF-8。 System.setOut 是 Java標(biāo)準(zhǔn)庫 中的一個靜態(tài)方法,用于設(shè)置標(biāo)準(zhǔn)輸出流。標(biāo)準(zhǔn)輸出流是程序輸出信息的默認(rèn)位置,通常是控制臺。 new PrintStream(System.o

    2024年02月06日
    瀏覽(21)
  • python,Pandas讀取csv文件gbk編碼和utf-8編碼都報錯

    python,Pandas讀取csv文件gbk編碼和utf-8編碼都報錯

    用Pandas讀取csv文件,read_csv(),使用默認(rèn)的 encoding = ‘utf-8’ 和 encoding = ‘gbk’ 都報錯,如下圖。最終通過 統(tǒng)一編碼方式 解決了,操作很簡單,但是問題解決的探索過程并不是特別順利,所以記錄一下,給朋友們參考~ 統(tǒng)一編碼方式,將csv文件的編碼格式改為utf-8。 具體操作

    2024年01月16日
    瀏覽(93)
  • UTF-8、UTF-16、Unicode、GB2312、GBK、GB18030一次說清楚

    1、關(guān)于存儲編碼和顯示編碼的區(qū)別。 Unicode是顯示編碼,UTF-8、UTF-16、GB2312、GBK、GB18030都是存儲/傳輸方面使用,也叫做存儲編碼、處理編碼,你在計算機上看見的所有文字都從存儲編碼轉(zhuǎn)成顯示編碼后,顯示出來,當(dāng)你單機保存時又從顯示編碼轉(zhuǎn)換為存儲編碼存儲起來。 2、

    2024年02月12日
    瀏覽(17)
  • java中http請求,記得加字符集 UTF-8,StringEntity

    http請求經(jīng)常會遇到一些奇怪的問題,例如發(fā)送請求失敗,或者response出現(xiàn)問題,或者參數(shù)中帶了url調(diào)接口失敗,調(diào)用微信接口失敗,調(diào)用nginx轉(zhuǎn)發(fā)失敗,等等。 但用postman調(diào)用不會有問題。 這說明參數(shù)本身沒有問題,服務(wù)器也沒有問題,是客戶端的問題。在你的代碼里面,客

    2024年02月07日
    瀏覽(24)
  • UTF-8、GB2312、GBK、GB18030、ISO-8859-1(也稱Latin-1):兼容ASCII編碼

    ASCII碼是單字節(jié)的,首位為0,后面表示的值就是Unicode碼點,范圍為0x00-0x7F,共表示128個字符。 UTF-8和ASCII兼容 :因為對于單字節(jié)的符號,UTF-8 編碼和 ASCII 碼是相同的, 所以 UTF-8 能兼容 ASCII 編碼。 GB2312和ASCII兼容 :對于ASCII范圍以內(nèi)的字符,GB2312編碼的機內(nèi)碼(不是區(qū)位碼)

    2024年02月16日
    瀏覽(18)
  • 【錯誤記錄】IntelliJ IDEA 中編譯運行報錯 ( 當(dāng)前設(shè)置 GBK 編碼 | 錯誤: 編碼UTF-8的不可映射字?? )

    【錯誤記錄】IntelliJ IDEA 中編譯運行報錯 ( 當(dāng)前設(shè)置 GBK 編碼 | 錯誤: 編碼UTF-8的不可映射字?? )

    當(dāng)前的 IntelliJ IDEA 設(shè)置的編碼為 GBK 編碼 , 選擇 \\\" 菜單欄 / File / Settings \\\" 選項 , 在 \\\" File Encodings \\\" 中 , 查看 工程的編碼 , 運行時報錯 : 在中文注釋的位置 , 編碼報錯 ; D:\\002_Project\\003_Java_WorkExsamplesrcmainjavaArrowCanvas.java:17 : 錯誤: 編碼UTF-8的不可映射字?? // ??????? ^

    2024年02月14日
    瀏覽(34)
  • 設(shè)置Tomcat字符編碼UTF-8

    設(shè)置Tomcat字符編碼UTF-8

    我這里是Tomcat7,標(biāo)簽大概在70行左右

    2024年02月16日
    瀏覽(21)
  • Redis如何把字符集的編碼格式設(shè)置為UTF-8

    Redis如何把字符集的編碼格式設(shè)置為UTF-8

    一、問題復(fù)現(xiàn)(編碼錯亂) ? ? ? ? 剛安裝好的redis在使用的過程中,若使用到了漢字,則在顯示的時候,漢字是不能夠正常顯示的,因為redis在解析的過程中,會將漢字轉(zhuǎn)換成其他編碼的格式,如下圖: 二、Redis支持哪些類型的編碼? ????????Redis是一款開源的內(nèi)存數(shù)據(jù)

    2024年02月02日
    瀏覽(20)
  • 字符集與字符編碼(理解ASCII、ANSI、UTF-8、Unicode,解決各種亂碼問題)

    字符集與字符編碼(理解ASCII、ANSI、UTF-8、Unicode,解決各種亂碼問題)

    相信很多同學(xué)也像我一樣,經(jīng)常在工作和學(xué)習(xí)中遇到字符編碼的疑惑或者受到亂碼的困擾,每次遇到問題都需要去學(xué)習(xí)了解不同的名詞含義甚至需要深入學(xué)習(xí)不同的編碼機制,不勝煩惱,所以今天我將自己的學(xué)習(xí)心得記錄下來,希望能簡單明了地描述字符集和字符編碼。 首先

    2024年02月03日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包