首页 > 编程知识 正文

javagbk乱码转换,java中文乱码转换

时间:2023-12-29 20:31:46 阅读:330666 作者:FIVS

本文目录一览:

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();

   }

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。