免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4981 | 回复: 0
打印 上一主题 下一主题

几种判断字符集编码的方法(Java) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-14 10:00 |只看该作者 |倒序浏览

1.通过把未知编码字符串,用猜想的编码再解码,观察字符串是不是正确还原了。
原理:假如目标编码没有数组中的字符,那么编码会破坏,无法还原。
缺点:假如字符少,而正巧错误的猜想编码中有这种字节,就会出错。
如:new String("tested str".getBytes("enc"),"enc")
2.大多数时候,我们只要判断本地平台编码和utf8,utf8编码相当有规律,所以可以分析是否是utf9,否则使用本地编码。
原理:分析byte[]来判断规律。
缺点:有时,个别本地编码字节在utf8中也会出现,导致出错,需要分析。
如转贴得函数:


public static boolean isValidUtf8(byte[] b,int aMaxCount)...{


int lLen=b.length,lCharCount=0;


for(int i=0;i

byte lByte=b[i++];//to fast operation, ++ now, ready for the following for(;;)


if(lByte>=0) continue;//>=0 is normal ascii


if(lByte(byte)0xc0 || lByte>(byte)0xfd) return false;


int lCount=lByte>(byte)0xfc?5:lByte>(byte)0xf8?4


:lByte>(byte)0xf0?3:lByte>(byte)0xe0?2:1;


if(i+lCount>lLen) return false;


for(int j=0;j=(byte)0xc0) return false;


}


return true;


}


相应地,一个使用上述方法的例子如下:


public static String getUrlParam(String aStr,String aDefaultCharset)



throws UnsupportedEncodingException...{


if(aStr==null) return null;


byte[] lBytes=aStr.getBytes("ISO-8859-1");


return new String(lBytes,StringUtil.isValidUtf8(lBytes)?"utf8":aDefaultCharset);


}
3.按编码规则,一字字比照。
优点是错物更少,缺点是太费资源。
字符检测类如下:http://dev.csdn.net/Develop/article/10/10961.shtm


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/55983/showart_1080600.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP