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/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

发表回复

登录后才能评论