java utf-8 gbk_Java 字符转码之UTF-8转为GBK/GB2312

本文介绍了如何在Java中将UTF-8编码的字符串转换为GBK编码。通过示例代码展示了从UTF-8到GBK的转换过程,并解释了关键代码的意义,包括使用`getBytes()`和`new String()`方法。文章还提到了Java内部使用Unicode编码以及可能遇到的问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java跟python类似的做法,在java中字符串的编码是java修改过的一种Unicode编码,所以看到java中的字符串,心理要默念这个东西是java修改过的一种Unicode编码的编码。

packagestring;importjava.nio.charset.Charset;public classUTF82GBK {public static void main(String[] args) throwsException {//系统的默认编码是GBK

System.out.println("Default Charset=" +Charset.defaultCharset());

String t= "hfjkds中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国hfsdkjsasa fjldsajflkdsjaflkdsjalf sadasfdsfadas";//思路:先转为Unicode,然后转为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);

}

}

packagecom.mkyong;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStreamReader;public classUTF8ToGBK {public static void main(String[] args) throwsException {

File fileDir= new File("/home/user/Desktop/Unsaved Document 1");

BufferedReader in= new BufferedReader(newInputStreamReader(new FileInputStream(fileDir), "UTF-8"));

String str;while ((str = in.readLine()) != null) {

System.out.println(str);//java内部只有unicode编码 所以str是unicode编码

String str2 = new String(str.getBytes("GBK"), "GBK");//str.getBytes("GBK")是gbk编码,但是str2是unicode编码

System.out.println(str2);

}

in.close();

}

}

问题的关键是new String(xxx.getBytes("gbk"), "gbk")这句话是什么意思,xxx.getBytes("gbk")得到的数组编码是GBK,因此必须必须告诉java:我传给你的数组是gbk编码的,你在转换成你内部的编码的时候记得要进行一些处理,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内置的编码->utf8 被当成GBK编码转换成java内置的编码

看一下jdk文档是怎么说的

public String(byte[] bytes,

Charset charset)

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

那现在的问题就是,我怎么在String中持有GBK编码的东西呢?

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值