一个比较偏僻的问题:如果字符串的内容是一种编码格式:String str = "GBK"; 或 String str = "utf-8"; 则返回true,如果字符串的内容不是编码格式(如String str = "srtergerg"; )则返回false

解决方案 »

  1.   

    这个没有直接的API,但是如果针对判断莫一种编码方式,可以写一个算法嘛
      

  2.   

    无责任转贴,没测试过
    http://simlee.javaeye.com/blog/431611
      

  3.   

    Java中字符串都是utf8的(准确的说是modified-utf8在utf8编码中,ascii字符是一个字节,而在java中是两个字节),所以单纯从字符串中是判断不了编码的。
    至于出现的乱码,是由于本身不是utf8的,但是java按照utf8来进行解释。如果要判断“字符串的编码”,那么就不能够使用String。而应该使用它的byte[]表示形式
    不同的编码字节的最高位是不一样的,具体的话可以查看编码的文档P.S.
    以上是个人理解~
      

  4.   

    另外,我觉得从根据字节方式判断某一个编码的话可能会不准确
    举例来说,所有的编码方式都和ascii兼容,也就是说如果这个“字符串”的所有字符都是ascii字符,那么就无法确定是哪一个编码了大概是这样吧~~
      

  5.   

    楼主对于编码似乎理解得还不够透彻。
    对于任何存储在虚拟机内存中的String类型的字符串,其编码格式是一种utf-8编码的变种,这种变种其实不是utf-8的编码格式,它是虚拟机字符串的内部编码。对于任何传入的所谓utf-8编码的字符串数据以及gbk字符串数据,都会转化成那种内部编码。
    如果你看到有这种语句new String(b,"gbk");,它所要表达的意思并不是说要生成一个字符编码为gbk的String的字符串,他所要表达的意思,其实是用gbk的编码模式去解析b这个字节数组(即数据),然后将解析结果变成虚拟机所认识的虚拟机内部字符串编码。
    而对于String.getByte("gbk")这个方法的意思,也并不是说获得一个gbk方式编码的字符串的byte数组数据,而是通过gbk的编码方式,将虚拟机的内部编码转换成gbk编码的byte数组数据,而String.getByte()是根据操作系统默认编码进行转码的方式,例如在windows操作系统下,其实这个等价于String.getByte("gbk")。
    要注意的是,虚拟机只认识utf-8变种的内部编码,对于其它编码方式它其实都不认识,不能被虚拟机自身解析。
    这里特别说明一下,其实utf-8的变种编码是sun的jdk实现,也许其它公司的jdk实现不是这种编码。
      

  6.   

    这个恐怕很难,因为编码实在是太多了。可以用一系列的if,else if,...,else。没有什么捷径可走啊!
      

  7.   


    public static boolean isCharSet(String charSet) {
    try {
    "test".getBytes(charSet);
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    return false;
    }
    return true;
    }
    这个问题这样做应该可以
      

  8.   

    public static isCharsetName(String charset) {
    Map<String, Charset> charsets = Charset.availableCharsets();
    for (Map.Entry<String, Charset> entry : charsets.entrySet()) {
    if (entry.getKey().equals(charset)) {
    return true;
    }
    }
    return false;
    }的确没多少人看清楚了楼主想要问什么,Java里面的java.nio.charset.Charset类可以穷举当前系统中所有可用的编码,目前好像只能用穷举了,希望对楼主有帮助。
      

  9.   

     public static boolean isGB2312(char c) {    
             Character ch = new Character(c);    
             String sCh = ch.toString();    
            try {    
                byte[]    bb = sCh.getBytes("gb2312");    
                if (bb.length > 1) {    
                    return true;    
                 }    
             } catch (java.io.UnsupportedEncodingException ex) {    
                return false;    
             }    
            return false;    
         }    
       
      

  10.   

    楼主,现在的编码格式比较的多!
    用这种方式吧!你写一个xml配置文档,方便拓展(因为不晓得到底有多少种编码方式)!然后写一个类用IO读出来!然后用判断此字符串是否在读出来的字符串中!
      

  11.   


    import java.nio.charset.Charset;public class CharsetTest {
        public static void main(String[] args) {
            System.out.println(Charset.isSupported("GBK"));
            System.out.println(Charset.isSupported("utf-8"));
            System.out.println(Charset.isSupported("iso-8859-1"));
            System.out.println(Charset.isSupported("hello"));
            System.out.println(Charset.isSupported("gbK"));
            System.out.println(Charset.isSupported("gbk"));
            System.out.println(Charset.isSupported("GB18030"));
        }
    }
      

  12.   

    boolean flag = CharSet.isSupported("GBK")
      

  13.   

    public static void main(String[] args) {   
    String code = "GBK";
    String faultCode = "GBA";
    System.out.println(code + " is a " + isCharset(code) + " charset");
    System.out.println(faultCode + " is a "+ isCharset(faultCode) + " charset");
        }
    public static boolean isCharset(String code){
    try {
    "".getBytes(code);
    return true;
    } catch (UnsupportedEncodingException e) {
    return false;
    }
    }