java new String()的问题 30

byte[]b="测试123".getBytes();System.out.println(Arrays.toString(newString(b).getBytes("... byte[] b="测试123".getBytes();
System.out.println(Arrays.toString(new String(b).getBytes("utf-8")));
System.out.println(Arrays.toString(new String(b, "utf-8").getBytes()));
请问以上两次打印为什么不一样,按我理解第一个是先通过字节数组生成字符串,之后在把字符串转成utf-8格式的字节数组;而第二个是先通过字节数组生成utf-8格式的字符串,然后再获得这个格式的字节数组。怎么理解都是一样的,为什打印会不同,请教高手。
展开
 我来答
百度网友6aa317c
推荐于2018-04-11 · TA获得超过174个赞
知道答主
回答量:97
采纳率:0%
帮助的人:86.7万
展开全部
打印这三个可以看的出 变化规律
System.out.println(new String(b));
System.out.println(new String(b, "utf-8"));
System.out.println(new String(b).getBytes("utf-8"));

中文是比较特殊的字符集 java默认编码格式是gbk 当你使用new String(b, "utf-8") 中文将会变成乱码 变成了4个问好 而问号的bytes asc码.是63 所以你的转码出现问题
cainiaokan
2013-08-22 · TA获得超过2917个赞
知道小有建树答主
回答量:651
采纳率:66%
帮助的人:613万
展开全部
byte[] b="测试123".getBytes();
//以上getBytes方法,是以系统的本地编码字符集,中文环境下是GBK,获得的字节编码。
new String(b).getBytes("utf-8");
//执行以上之后,获得的是字符串的最终的utf-8的字节编码。

但是下面的做法会产生另外一种结果

new String(b, "utf-8").getBytes();
//你的b是GBK的字节编码,你却要以utf-8重新编码成字符串,这时候产生了问题。
//GBK是双字节编码,utf-8是变长字节编码,转换过程中,产生差错。自然之后getBytes取得的
//字节就变成了错误的了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6ddfe974a
2013-08-22 · 超过12用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:42.6万
展开全部
楼主你默认的编码方式是UTF-8么?我在Eclipse下这两个输出结果是一样的。
public static void main(String[] args) throws UnsupportedEncodingException {
// TODO Auto-generated method stub
byte[] b = "测试123".getBytes();
System.out.println(Arrays.toString(new String(b).getBytes("utf-8")));
System.out.println(Arrays.toString(new String(b, "utf-8").getBytes()));
}
控制台:[-26, -75, -117, -24, -81, -107, 49, 50, 51]
[-26, -75, -117, -24, -81, -107, 49, 50, 51]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友49dabf6
2013-08-22 · TA获得超过106个赞
知道答主
回答量:94
采纳率:50%
帮助的人:67.4万
展开全部
Set<Object> m=System.getProperties().keySet();
for(Iterator<Object> i=m.iterator();i.hasNext();)
{
String e=(String) i.next();
System.out.println(e+"::"+System.getProperties().get(e));
}

看看你系统中的字符集是什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
blacklong
2013-08-22 · TA获得超过1501个赞
知道大有可为答主
回答量:2745
采纳率:0%
帮助的人:1254万
展开全部
不指定编码,就使用系统默认编码~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式