java字符串转码之续

上一篇中我描写了一些字符串乱码的原因,同时也补了一个乱码转码的方法。

这篇我们来探讨这个方法的一些局限性。。废话不说,先上代码

String strDefalt = "";
String strDefaltEncode = "";
try {
	strDefalt = "我的心不乱";
	strDefaltEncode = new String("我的心不乱".getBytes(),"utf-8");
	String temp = new String(strDefaltEncode.getBytes("utf-8"),"gbk");
	System.out.println("temp="+temp);
} catch (UnsupportedEncodingException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
System.out.println("Default charsetName="+Charset.defaultCharset().name());
System.out.println("strDefalt="+strDefalt);
System.out.println("strDefaltEncode="+strDefaltEncode)

 

 显示结果为

temp=锟揭碉拷锟侥诧拷锟斤拷
Default charsetName=GBK
strDefalt=我的心不乱
strDefaltEncode=????????
strChangeEncode=???拷???拷?斤拷

 在这次转码时字符串并没有如预想的一样转化为正确的字符,还是出现了乱码。

 

 

String strDefalt = "";
String strDefaltEncode = "";
String changeEncode = "";
try {
	strDefalt = "我的心不乱";
	strDefaltEncode = new String("我的心不乱".getBytes(),"utf-8");
	changeEncode = new String("我的心不乱".getBytes(),"shift-jis");
	System.out.println("strDefalt ");
	for(byte b : strDefalt.getBytes()){
		System.out.print(b+",");
	}
	System.out.println();
	System.out.println("strDefaltEncode ");
	for(byte b : strDefaltEncode.getBytes("utf-8")){
		System.out.print(b+",");
	}
	System.out.println();
	System.out.println("changeEncode ");
	for(byte b : changeEncode.getBytes("shift-jis")){
		System.out.print(b+",");
	}	
} catch (UnsupportedEncodingException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

 显示结果如下

 

strDefalt 
-50,-46,-75,-60,-48,-60,-78,-69,-62,-46,
strDefaltEncode 
-17,-65,-67,-46,-75,-17,-65,-67,-17,-65,-67,-60,-78,-17,-65,-67,-17,-65,-67,-17,-65,-67,
changeEncode 
-50,-46,-75,-60,-48,-60,-78,-69,-62,-46,

 代码显示平台默认的gbk的byte数组和错转为utf-8再转回来的明显不一样。

 而错转为shift-jis的再转回来和远byte数组则是一样的。

  为什么会出错的原因我具体也不是很清楚,但据我目前的知识我只能解释为utf-8的数字格式并不固定,有可能是这个原因导致错转为utf-8后就污染了原来的byte数组。

  这一块还希望各位达人牛人来指导,指正。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值