请高手帮忙 有段程序看不懂

杜家高 发布于 2010/04/11 12:07
阅读 192
收藏 0

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);
   
}
请给讲解一下这个函数是做什么用的,谢谢大家了

加载中
0
红薯
红薯

看方法名称是将byte数组的某一段转成UTF8字符串。

0
杜家高
  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. 这些移位 和与运算 是 转换的算法吗?
0
红薯
红薯

这个一般要非常深入这个转换过程的人才能看出来,你不妨去了解一下这代码的实际用途。

0
0
无声的呼唤
无声的呼唤

施洲博

发了一个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;

}

0
无声的呼唤
无声的呼唤

你看看,我感觉和你的很像。不过你里面有位移。

0
无声的呼唤
无声的呼唤

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

0
无声的呼唤
无声的呼唤

这段nbby 的回复。看了你应该差不多了吧

0
hikari
hikari

请教一下,这段代码,那里有可能抛出异常?

返回顶部
顶部