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格式的字符串,然后再获得这个格式的字节数组。怎么理解都是一样的,为什打印会不同,请教高手。 展开
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格式的字符串,然后再获得这个格式的字节数组。怎么理解都是一样的,为什打印会不同,请教高手。 展开
5个回答
展开全部
打印这三个可以看的出 变化规律
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 所以你的转码出现问题
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 所以你的转码出现问题
展开全部
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取得的
//字节就变成了错误的了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主你默认的编码方式是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]
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]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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));
}
看看你系统中的字符集是什么?
for(Iterator<Object> i=m.iterator();i.hasNext();)
{
String e=(String) i.next();
System.out.println(e+"::"+System.getProperties().get(e));
}
看看你系统中的字符集是什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不指定编码,就使用系统默认编码~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询