javagbk亂碼轉換,java中文亂碼轉換

本文目錄一覽:

Java中如何把GBK編碼的字符串轉成utf-8編碼

我先解釋一下我對你的問題的理解

你的問題有點籠統

可以這麼理解兩個意思

,你是想吧一個gbk編碼的字符串用utf-8格式來編碼

String

s

=

new

String

(“全國”.getBytes(“GBK”),”GBK”);

雖然這個時候的s是GBK編碼的

但是s還是中文字符的

所以

上面這位同胞用

new(s.getBytes(“GBK”),”UTF-8″)的方式肯定是錯的

應該用

String

s1

=

new

String

(s.getBytes(“UTF-8″),”UTF-8”)

這樣s1就是UTF-8編碼的字符串了

二,如果是遇見亂碼問題

比如

String

s

=

new

String

(“全國”.getBytes(“GBK”),”GBK”);

這樣的s就是gbk編碼的

現在你要把GBK格式的編碼用UTF-8去編碼

肯定就會出現亂碼

String

s2

=

new

String(s.getBytes(“GBK”),”UTF-8″);

這個s2肯定是亂碼的

而且這樣就根本解不出來了

系統出現的亂碼顯示的時候才會出現編碼錯誤

所以

一般出現亂碼

只要把輸入流換個編碼解析一下就ok了

還有什麼不明白

可以問我

java 怎麼gbk轉碼utf-8

方法一:

思路:先轉為Unicode,然後轉為GBK

String utf8 = new String(t.getBytes( “UTF-8”));  

System.out.println(utf8);  

String unicode = new String(utf8.getBytes(),”UTF-8″);   

System.out.println(unicode);  

String gbk = new String(unicode.getBytes(“GBK”));  

  

System.out.println(gbk);

方法二:

public static void main(String[] args) {

        String str=”字符串編碼轉換”;

        try {

          byte[] temp=str.getBytes(“utf-8”);//這裡寫原編碼方式

            byte[] newtemp=new String(temp,”utf-8″).getBytes(“gbk”);//這裡寫轉換後的編碼方式

            String newStr=new String(newtemp,”gbk”);//這裡寫轉換後的編碼方式

            System.out.println(newStr);

        } catch (UnsupportedEncodingException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

java中GBK編碼格式轉成UTF8,用一段方法實現怎麼做

首先明確幾點:

unicode是一種“編碼”,所謂編碼就是一個編號(數字)到字符的一種映射關係,就僅僅是一種一對一的映射而已,可以理解成一個很大的對應表格

GBK、UTF-8是一種“編碼格式”,是用來序列化或存儲1中提到的那個“編號(數字)”的一種“格式”;GBK和UTF-8都是用來序列化或存儲unicode編碼的數據的,但是分別是2種不同的格式; 他們倆除了格式不一樣之外,他們所關心的unicode編碼範圍也不一樣,utf-8考慮了很多種不同國家的字符,涵蓋整個unicode碼錶,所以其存儲一個字符的編碼的時候,使用的字節長度也從1字節到4字節不等;而GBK只考慮中文——在unicode中的一小部分——的字符,的編碼,所以它算好了只要2個字節就能涵蓋到絕大多數常用中文(2個字節能表示6w多種字符),所以它存儲一個字符的時候,所用的字節長度是固定的;

上述2個概念不懂的請馬上google,下面不再贅述;我下面說說這個問題本身…的問題在哪裡

首先java的string使用的編碼是unicode,但是,當string存在於內存中時(也就是當程序運行時、你在代碼中用string類型的引用對它進行操作時、也就是string沒有被存在文件中且也沒有在網絡中傳輸(序列化)時),是“只有編碼而沒有編碼格式的”,所以java程序中的任何String對象,說它是gbk還是utf-8都是錯的,gbk和utf-8是編碼格式而不是編碼,String在內存中不需要“編碼格式”(記住編碼格式是在存文件或序列化的時候使用的), 它只是一個unicode的字符串而已

所以java裡面String是不帶編碼格式的,而String.toByteArray(charsetName)得到的byteArray是帶編碼格式的,格式就是你傳入的’charsetName’,我們不妨把toByteArray的這個過程叫做“編碼”;另外,new String(byte[], charsetName)是把一個byte數組(帶編碼格式)以charsetName指定的編碼格式翻譯為一個不帶編碼格式的String對象,我們不妨把這個過程叫“解碼”

那麼根據我揣測提問者的意圖,可能有2種問法是他真正想問的:

第一,如何把一個被錯誤地當作是gbk格式存儲的utf-8格式的文件裡面讀出來的一段亂碼字符串還原回去(也就是說本來二進制數據是utf-8的,你用gbk來解碼它,得到的字符串是亂碼,現在想要還原回去)

第二種,如何把一個gbk文件轉化為utf-8文件

如果是第一種意圖那就:

public static void main(String… args) throws Throwable {

String errStr = “errStr”;

System.out.println(recover(errStr));

}

public static String recover(String str) throws Throwable {

return new String(str.getBytes(“GBK”), “UTF-8”);

}

其中errStr就是亂碼字符串,按照相反的順序在編碼(用gbk)、解碼(用utf-8)回去,就能得到正確的字符串(其實不保證所有情況均能正確還原,只能說大部分都能,要看你在亂碼過程中是否有數據被丟失)

如果是第二種意圖,那就用InputStream以gbk格式將文件讀到內存里(表示為String),再將這個String以UTF-8編碼寫入目標文件里,具體請參考InputStream/OutputStream的api

java怎麼將gbk編碼的文件轉成utf-8編碼

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.nio.charset.Charset;

public class gbk2utf8 {

   public static void main(String[] args) throws InterruptedException, IOException {

      gbk2utf8 tt = new gbk2utf8();

      tt.copyAll(“E:\\mine\\GitHub\\mytest\\myJar\\src”, “E:/test”);

   }

   

   public void copyAll(String dir,String des) throws IOException{

      

      File parent = new File(dir);

      System.err.println(parent.getAbsolutePath());

      String[] allFile = parent.list();

      

      for (String string : allFile) {

         File file = new File(dir+”/”+string);

         if(file.isFile()){

            this.copy(file,des);

         }else{

            File newDes = new File(des+”/”+string);

            if(!newDes.exists()) newDes.mkdir();

            this.copyAll(dir+”/”+string,des+”/”+string);

         }

      }

   }

   

   public void copy(File file,String des) throws IOException{

      BufferedReader br = new BufferedReader(new InputStreamReader(

            new FileInputStream(file), Charset.forName(“gbk”)));

      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(

            new FileOutputStream(des+”/”+file.getName()), Charset.forName(“UTF-8”)));

      String lineTxt = null;

      while ((lineTxt = br.readLine()) != null) {

         bw.write(lineTxt);

         bw.newLine();

      }

      bw.flush();

      bw.close();

      br.close();

   }

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/238422.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:11
下一篇 2024-12-12 12:11

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Python zipfile解壓文件亂碼處理

    本文主要介紹如何在Python中使用zipfile進行文件解壓的處理,同時詳細討論在解壓文件時可能出現的亂碼問題的各種解決辦法。 一、zipfile解壓文件亂碼問題的根本原因 在P…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論