Java中如果自身是utf8编码,再用utf8编码转下会成乱码吗

 我来答
jamxval
2014-10-14 · TA获得超过6821个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1372万
展开全部

Java 中内核是 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");
还是正能量
2014-10-14 · 超过11用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:33.4万
展开全部
不会的,转码过程只是对0100101这种东西的重新识别而已
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
再见旧时光g
2014-10-14 · TA获得超过170个赞
知道答主
回答量:228
采纳率:100%
帮助的人:40.5万
展开全部
不会的,但是为什么要这么做不是多此一举么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式