当前位置: 代码迷 >> Java Web开发 >> 判断是不是GB2312!解决方案
  详细解决方案

判断是不是GB2312!解决方案

热度:396   发布时间:2016-04-17 12:31:16.0
判断是不是GB2312!
同志们我这段代码
  public String ifGb2312(String useKey) throws UnsupportedEncodingException {
  if(useKey.equals("")||useKey==null)
  {
  return "";
  }//如果是空则返回空



  byte[] getChin = null;
  getChin = useKey.getBytes();
  int iHead = getChin[0] & 0xff;
  int iTail = getChin[1] & 0xff;
  boolean aaa = true;
  aaa = ((iHead >= 0xa1 && iHead <= 0xf7 && iTail >= 0xa1 && iTail <= 0xfe)) ? true : false;
  if (!aaa) {
  useKey = new String(useKey.getBytes("iso-8859-1"), "GB2312");
  }

  return useKey;
  }
这段代码虽然可以判断出是不是GB2312,如果不是就从ISO-8859-1转过来,如果是就直接返回。但是别的汉字都能够识别唯独“澳”,“法”,“分”等词不行,我真没有办法了各位看看吧!谢谢啦


------解决方案--------------------
Java code
  public static boolean isGB2312(String str) {    char[] chars = str.toCharArray();    boolean isGB2312 = false;    for (int i = 0; i < chars.length; i++) {      byte[] bytes = ("" + chars[i]).getBytes();      if (bytes.length == 2) {        int[] ints = new int[2];        ints[0] = bytes[0] & 0xff;        ints[1] = bytes[1] & 0xff;        if (ints[0] >= 0x81 && ints[0] <= 0xFE && ints[1] >= 0x40 && ints[1] <= 0xFE) {          isGB2312 = true;          break;        }      }    }    return isGB2312;  }
------解决方案--------------------
if (ints[0] >= 0x81 && ints[0] <= 0xFE && ints[1] >= 0x40 && ints[1] <= 0xFE) {

修改你的代码看看

aaa = ((iHead > = 0x81 && iHead <= 0xFE && iTail > = 0x40 && iTail <= 0xFE)) ? true : false; 

------解决方案--------------------
我刚明白你要干什么!!

提示:
误解:“Java 中,怎样知道某个字符串的内码?”
Java 中,字符串类 java.lang.String 处理的是 UNICODE 字符串,不是 ANSI 字符串。我们只需要把字符串作为“抽象的符号的串”来看待。因此不存在字符串的内码的问题。

也就是说,一旦你生成了java String 对象,就无法知道原始编码是啥了!

同样的2个字节,在不同的编码方式下,可能都能使用。
比如汉字 "这"
其GKB编码为D5E2
其UTF-8编码为 E8 BF 99
你知道 "杩"的GK编码是啥嘛? 是 E8 BF, 也就是UTF-8编码的前2位, 所以从字节上根本不能判断是什么编码的!

给你一个测试编码的程序,你看一下就知道了!
Java code
  public static void main(String[] agrs) throws Exception {    String hz = "这";    byte[] bs = hz.getBytes("GBK");    for (byte b : bs) {      System.out.print(byteToString(b));    }    System.out.println();    bs = hz.getBytes("UTF-8");    for (byte b : bs) {      System.out.print(byteToString(b));    }        bs = new byte[]{(byte)0xE8,(byte)0xBF};    System.out.println(new String(bs));  }
  相关解决方案