9
回答
请高手帮忙 有段程序看不懂
注册华为云得mate10,2.9折抢先购!>>>   

public static String toUTF(byte serverData[], int off, int len) {
    char infoStr[] = new char[len * 2];
    int i = 0;
    int charCount = 0;
    while (i < len) {
      try {
        char ch;
        if ( (serverData[i + off] & 0x80) != 0) {
          if ( (serverData[i + off] & 0x20) != 0) {
            ch = (char) ( (serverData[i + off] & 0xf) << 12);
            ch += (char) (serverData[i + 1 + off] & 0x3f) << 6;
            ch += serverData[i + 2 + off] & 0x3f;
            i += 3;
          }
          else {
            ch = (char) ( (serverData[i + off] & 0x1f) << 6);
            ch += serverData[i + 1 + off] & 0x3f;
            i += 2;
          }
        }
        else {
          ch = (char) serverData[i + off];
          i++;
     
        }
        infoStr[charCount++] = ch;
      }
      catch (Exception _ex) {}
    }
    return new String(infoStr, 1, charCount);
   
}
请给讲解一下这个函数是做什么用的,谢谢大家了

<无标签>
举报
杜家高
发帖于8年前 9回/188阅
共有9个答案 最后回答: 8年前
  1. if ( (serverData[i + off] & 0x80) != 0) {   
  2.           if ( (serverData[i + off] & 0x20) != 0) {   
  3.             ch = (char) ( (serverData[i + off] & 0xf) << 12);   
  4.             ch += (char) (serverData[i + 1 + off] & 0x3f) << 6;   
  5.             ch += serverData[i + 2 + off] & 0x3f;   
  6.             i += 3;   
  7. 这些移位 和与运算 是 转换的算法吗?

施洲博

发了一个Java如何获得文件编码格式  的函数

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

       int lLen=b.length,lCharCount=0;

       for(int i=0;i<lLen && lCharCount<aMaxCount;++lCharCount){

              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<lCount;++j,++i) if(b[i]>=(byte)0xc0) return false;

       }

       return true;

}

按照给定的字符集存储文本文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。

顶部