java代码:
private static boolean Isutf8orgb2312(int[] value){
int iGBK = CountGBK(value);
android.util.Log.e(TAG,"iGBK="+iGBK);
int iUTF8 = CountUTF8(value);
android.util.Log.e(TAG,"iUTF8="+iUTF8);
if (iUTF8 > iGBK)
return false;
return true;
}
private static int CountGBK(int[] arrayData){
int counter = 0;
for (int i=0; i<arrayData.length-1; i++) {
if(((byte)arrayData[i] & 0x80) == 0) continue;
if (arrayData[i] >= 161 && arrayData[i] <= 247 && arrayData[i+1]>=161 && arrayData[i+1] <= 254){
counter+= 2;
i++;
}
}
return counter;
}
private static int CountUTF8(int[] arrayData) {
int counter = 0;
int head = 0x80;
for (int i = 0; i < arrayData.length; i++) {
if (((byte) arrayData[i] & 0x80) == 0)
continue;
int tmpHead = head;
int wordLen = 0, tPos = 0;
while ((arrayData[i] & tmpHead) > 0) {
++wordLen;
tmpHead >>= 1;
}
android.util.Log.e(TAG,"wordLen="+wordLen);
if (wordLen <= 1)
continue; // utf8最小长度为2
wordLen--;
if (wordLen + i >= arrayData.length)
break;
for (tPos = 1; tPos <= wordLen; ++tPos) {
byte secondChar = (byte) arrayData[i + tPos];
if ((secondChar & head) == 0)
break;
}
if (tPos > wordLen) {
android.util.Log.e(TAG,"wordLenxxx="+wordLen);
counter += wordLen + 1;
i += wordLen;
}
}
return counter;
}