java utf8编码转中文乱码_Java中如果自身是utf8编码,再用utf8编码转下会成乱码吗...

展开全部

Java 中内核是32313133353236313431303231363533e4b893e5b19e31333335336436 unicode,字符集只是在“当我们想把它通过网络发送出去或保存到磁盘或打印机上去” 才需要按字符集的方案编码成 byte[]。

所以你这句话中的“Java中如果自身是 utf8" 这段是没有意义的。

一个 String 字符串不存在字符集概念,只有把一个 String 转换成 byte[] 时才需要指定字符集。如果你说用 utf8 转换两次,那这其中至少还需要涉及到另一种字符集才有可能。纯粹转换2次是不可能的,因为转换是在 String 和 byte[] 之间,当我们把 byte[] 转换成 string 再转换成另一个 byte[] 那么这其中把 byte[] 转换成 String 本身就涉及到另一个字符集了。

String a = "汉字”;

byte[] utf8 = a.getBytes("utf-8");

String b  = new String(utf8, "GB18030"); // 这样直接显示出来是乱码。

byte[] c = b.getBytes("GB18030"); // 这个过程或许能还原掉刚才的乱码过程,但不一定,可能在前面的 new String(utf8, "GB18030"); 过程中就已经破坏了,因为一般会检查是否超出范围,当超出 GB18030 的范围时的结果很难预料,可能被丢弃,也可能直接放一个默认的像0、-1这样的东西占个位置,以后再转换回去时就出错了。

String d = new String(c, "UTF-8");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值