您好,欢迎访问一九零五行业门户网

lib.utf.js_lib_js

/* utf-8 utf-16 convertion library.
 *
/* copyright (c) 1999 masanao izumo iz@onicos.co.jp>
 * 2007 ma bingyao andot@ujn.edu.cn>
 * version: 2.1
 * lastmodified: feb 25, 2007
 * this library is free. you can redistribute it and/or modify it.
 */
/*
 * interfaces:
 * utf8 = utf16to8(utf16);
 * utf16 = utf16to8(utf8);
 */
function utf16to8(str) {
    if (str.match(/^[\x00-\x7f]*$/) != null) {
        return str;
    }
    var out, i, j, len, c, c2;
    out = [];
    len = str.length;
    for (i = 0, j = 0; i         c = str.charcodeat(i);
        if (c             out[j] = str.charat(i);
        }
        else if (c             out[j] = string.fromcharcode(0xc0 | (c >>> 6),
                 0x80 | (c & 0x3f));
        }
        else if (c || c > 0xdfff) {
            out[j] = string.fromcharcode(0xe0 | (c >>> 12),
                 0x80 | ((c >>> 6) & 0x3f),
                 0x80 | (c & 0x3f));
        }
        else {
            if (++i                 c2 = str.charcodeat(i);
                if (c && 0xdc00 && c2                  c = ((c & 0x03ff) 10 | (c2 & 0x03ff)) + 0x010000;
                 if (0x010000 && c                  out[j] = string.fromcharcode(0xf0 | ((c >>> 18) & 0x3f),
                 0x80 | ((c >>> 12) & 0x3f),
                 0x80 | ((c >>> 6) & 0x3f),
                 0x80 | (c & 0x3f));
                 }
                 else {
                 out[j] = '?';
                 }
                }
                else {
                 i--;
                 out[j] = '?';
                }
            }
            else {
                i--;
                out[j] = '?';
            }
        }
    }
    return out.join('');
}
function utf8to16(str) {
    if ((str.match(/^[\x00-\x7f]*$/) != null) ||
        (str.match(/^[\x00-\xff]*$/) == null)) {
        return str;
    }
    var out, i, j, len, c, c2, c3, c4, s;
out = [];
    len = str.length;
    i = j = 0;
    while (i         c = str.charcodeat(i++);
        switch (c >> 4) {
            case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
            // 0xxx xxxx
out[j++] = str.charat(i - 1);
            break;
            case 12: case 13:
            // 110x xxxx 10xx xxxx
c2 = str.charcodeat(i++);
            out[j++] = string.fromcharcode(((c & 0x1f) 6) |
                 (c2 & 0x3f));
            break;
            case 14:
            // 1110 xxxx 10xx xxxx 10xx xxxx
c2 = str.charcodeat(i++);
            c3 = str.charcodeat(i++);
            out[j++] = string.fromcharcode(((c & 0x0f) 12) |
                 ((c2 & 0x3f) 6) |
                 (c3 & 0x3f));
            break;
            case 15:
            switch (c & 0xf) {
                case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
                // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx
c2 = str.charcodeat(i++);
                c3 = str.charcodeat(i++);
                c4 = str.charcodeat(i++);
                s = ((c & 0x07) 18) |
                 ((c2 & 0x3f) 12) |
                 ((c3 & 0x3f) 6) |
                 (c4 & 0x3f) - 0x10000;
                if (0 && s                  out[j] = string.fromcharcode(((s >>> 10) & 0x03ff) | 0xd800,
                 (s & 0x03ff) | 0xdc00);
                }
                else {
                 out[j] = '?';
                }
                break;
                case 8: case 9: case 10: case 11:
                // 1111 10xx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
i+=4;
                out[j] = '?';
                break;
                case 12: case 13:
                // 1111 110x 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
i+=5;
                out[j] = '?';
                break;
            }
        }
        j++;
    }
    return out.join('');
}

其它类似信息

推荐信息