2010年8月19日 星期四

AS3 計算 BIG5 碼中文字的筆劃

將字元轉換成big5內碼,因為各編碼是以筆畫做為排序,所以只要取其各筆畫的範圍,就可以區分出各筆畫範圍,以下是傳進一字元,回傳筆畫數


public static function getTraditionalStrokes(char:String):int
{
    var byteArr:ByteArray = new ByteArray();
    var result:int;  
    byteArr.writeMultiByte(char, "big5");
    var b1:int = byteArr[0] & 0xFF;
    var b2:int = byteArr[1] & 0xFF;
    var b:int = (b1 << 8) + b2;   

    if ((b == 0xA440) || (b == 0xA441)) {
        result = 1;
    }
    //2劃
    else if (((b >= 0xA442) && (b <= 0xA453)) || ((b >= 0xC940) && (b <= 0xC944))) {
        result = 2;
    }
    //3劃
    else if (((b >= 0xA454) && (b <= 0xA47E)) || ((b >= 0xC945) && (b <= 0xC94C))) {
        result = 3;
    }
    //4劃
    else if (((b >= 0xA4A1) && (b <= 0xA4FD)) || ((b >= 0xC94D) && (b <= 0xC962))) {
        result = 4;
    }
    //5劃
    else if (((b >= 0xA4FE) && (b <= 0xA5DF)) || ((b >= 0xC963) && (b <= 0xC9AA))) {
        result = 5;
    }
    //6劃
    else if (((b >= 0xA5E0) && (b <= 0xA6E9)) || ((b >= 0xC9AB) && (b <= 0xCA59))) {
        result = 6;
    }
    //7劃
    else if (((b >= 0xA6EA) && (b <= 0xA8C2)) || ((b >= 0xCA5A) && (b <= 0xCBB0))) {
        result = 7;
    }
    //8劃
    else if (((b == 0xA260) || (b >= 0xA8C3) && (b <= 0xAB44)) || ((b >= 0xCBB1) && (b <= 0xCDDC))) {
        result = 8;
    }
    //9劃
    else if ((b == 0xA259) || (b == 0xF9DA) || ((b >= 0xAB45) && (b <= 0xADBB)) || ((b >= 0xCDDD) && (b <= 0xD0C7))) {
        result = 9;
    }
    //10劃
    else if ((b == 0xA25A) || ((b >= 0xADBC) && (b <= 0xB0AD)) || ((b >= 0xD0C8) && (b <= 0xD44A))) {
        result = 10;
    }
    //11劃
    else if ((b == 0xA25B) || (b == 0xA25C) || ((b >= 0xB0AE) && (b <= 0xB3C2)) || ((b >= 0xD44B) && (b <= 0xD850))) {
        result = 11;
    }
    //12劃
    else if ((b == 0xF9DB) || ((b >= 0xB3C3) && (b <= 0xB6C2)) || ((b >= 0xD851) && (b <= 0xDCB0))) {
        result = 12;
    }
    //13劃
    else if ((b == 0xA25D) || (b == 0xA25F) || (b == 0xC6A1) || (b == 0xF9D6) || (b == 0xF9D8)
            || ((b >= 0xB6C3) && (b <= 0xB9AB)) || ((b >= 0xDCB1) && (b <= 0xE0EF))) {
        result = 13;
    }
    //14劃
    else if ((b == 0xF9DC) || ((b >= 0xB9AC) && (b <= 0xBBF4)) || ((b >= 0xE0F0) && (b <= 0xE4E5))) {
        result = 14;
    }
    //15劃
    else if ((b == 0xA261) || ((b >= 0xBBF5) && (b <= 0xBEA6)) || ((b >= 0xE4E6) && (b <= 0xE8F3))) {
        result = 15;
    }
    //16劃
    else if ((b == 0xA25E) || (b == 0xF9D7) || (b == 0xF9D9) || ((b >= 0xBEA7) && (b <= 0xC074))
            || ((b >= 0xE8F4) && (b <= 0xECB8))) {
        result = 16;
    }
    //17劃
    else if (((b >= 0xC075) && (b <= 0xC24E)) || ((b >= 0xECB9) && (b <= 0xEFB6))) {
        result = 17;
    }
    //18劃
    else if (((b >= 0xC24F) && (b <= 0xC35E)) || ((b >= 0xEFB7) && (b <= 0xF1EA))) {
        result = 18;
    }
    //19劃
    else if (((b >= 0xC35F) && (b <= 0xC454)) || ((b >= 0xF1EB) && (b <= 0xF3FC))) {
        result = 19;
    }
    //20劃
    else if (((b >= 0xC455) && (b <= 0xC4D6)) || ((b >= 0xF3FD) && (b <= 0xF5BF))) {
        result = 20;
    }
    //21劃
    else if (((b >= 0xC4D7) && (b <= 0xC56A)) || ((b >= 0xF5C0) && (b <= 0xF6D5))) {
        result = 21;
    }
    //22劃
    else if (((b >= 0xC56B) && (b <= 0xC5C7)) || ((b >= 0xF6D6) && (b <= 0xF7CF))) {
        result = 22;
    }
    //23劃
    else if (((b >= 0xC5C8) && (b <= 0xC5F0)) || ((b >= 0xF7D0) && (b <= 0xF8A4))) {
        result = 23;
    }
    //24劃
    else if (((b >= 0xC5F1) && (b <= 0xC654)) || ((b >= 0xF8A5) && (b <= 0xF8ED))) {
        result = 24;
    }
    //25劃
    else if (((b >= 0xC655) && (b <= 0xC664)) || ((b >= 0xF8EE) && (b <= 0xF96A))) {
        result = 25;
    }
    //26劃
    else if (((b >= 0xC665) && (b <= 0xC66B)) || ((b >= 0xF96B) && (b <= 0xF9A1))) {
        result = 26;
    }
    //27劃
    else if (((b >= 0xC66C) && (b <= 0xC675)) || ((b >= 0xF9A2) && (b <= 0xF9B9))) {
        result = 27;
    }
    //28劃
    else if (((b >= 0xC676) && (b <= 0xC678)) || ((b >= 0xF9BA) && (b <= 0xF9C5))) {
        result = 28;
    }
    //29劃
    else if (((b >= 0xC679) && (b <= 0xC67C)) || ((b >= 0xF9C7) && (b <= 0xF9CB))) {
        result = 29;
    }
    //30劃
    else if ((b == 0xC67D) || ((b >= 0xF9CC) && (b <= 0xF9CF))) {
        result = 30;
    }
    //31劃
    else if (b == 0xF9D0) {
        result = 31;
    }
    //32劃
    else if ((b == 0xC67E) || (b == 0xF9D1)) {
        result = 32;
    }
    //33劃
    else if ((b == 0xF9C6) || (b == 0xF9D2)) {
        result = 33;
    }
    //35劃
    else if (b == 0xF9D3) {
        result = 35;
    }
    //36劃
    else if (b == 0xF9D4) {
        result = 36;
    }
    //48劃
    else if (b == 0xF9D5) {
        result = 48;
    }
   
    //trace("result---->" + result);
    return result;
}

沒有留言: