试试这个,
public static String getEncoding(String str)
{
String[] encodings={"iso8859_1","gb2312","utf-8"};
String encoding="";
try
{
for(int i=0;i<encodings.length;i++)
{
if(str.equals(new String(str.getBytes(),encodings[i])))
return encodings[i];

}

}
catch(Exception e)
{
//e.printStackTrace();
}
return  "Unknown";
}

解决方案 »

  1.   

    非常感谢!但是有时真的返回"Unknown",除了以上三种编码方式外,还有别的吗?
      

  2.   

    opencsdn(虚心求教) :我越来越糊涂了:str.equals(new String(str.getBytes(),encodings[i]))照文档上说getBytes()实际上使用平台默认的字符集,那在中文系统下就是gb2312了?
    倘若str本身是iso8859-1的,那么按gb2312对它编码后,要解回原来的字符串是用gb2312还是iso8859-1呢?按照你的算法的思路,如果str是用iso8859-1编的,那么被转成字节流后,只有用iso8859-1才能转回来,可是问题是转成字节流的时候并没有指定按什么编码转,真迷湖啊,还望多多指点!
      

  3.   

    几种编码方案有交集,如果都是英文字符的话,在中文系统上,上述程序返回iso8859_1.
    上面几种方案是少===大,还有,你得到的网页上字符串,可以看看那些网页是什么编码的.
    csdn gb2312;google.utf-8,yahoo.com utf-8
      

  4.   

    上面的函数有时候不对啊,明明是gb2312的,但返回的是iso8859_1,
    因为我手工测试了,用gb2312解码后是对的
      

  5.   

    建议你看一下编码再说还有从byte只能猜测编码,得不到准确的编码..字符串无所谓编码,因为它已经被编过了。不是所有字符都能用所有编码编的,如果无法编码的字符串,默认会给出31,也就是问号。(你可以自己指定,不废话了)
      

  6.   

    这里有个blog引用了一篇关于字符编码检测的老外的文章,提供给你参考一下http://oldblog.blogchina.com/article_62789.805460.html