/* utf.js - utf-8 <=> utf-16 convertion * * copyright (c) 1999 masanao izumo * version: 1.0 * lastmodified: dec 25 1999 * this library is free. you can redistribute it and/or modify it. */ /* * interfaces: * utf8 = utf16to8(utf16); * utf16 = utf16to8(utf8); */ function utf16to8(str) { var out, i, len, c; out = ""; len = str.length; for(i = 0; i < len; i++) { c = str.charcodeat(i); if ((c >= 0x0001) && (c <= 0x007f)) { out += str.charat(i); } else if (c > 0x07ff) { out += string.fromcharcode(0xe0 | ((c >> 12) & 0x0f)); out += string.fromcharcode(0x80 | ((c >> 6) & 0x3f)); out += string.fromcharcode(0x80 | ((c >> 0) & 0x3f)); } else { out += string.fromcharcode(0xc0 | ((c >> 6) & 0x1f)); out += string.fromcharcode(0x80 | ((c >> 0) & 0x3f)); } } return out; } function utf8to16(str) { var out, i, len, c; var char2, char3; out = ""; len = str.length; i = 0; while(i < len) { c = str.charcodeat(i++); switch(c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: // 0xxxxxxx out += str.charat(i-1); break; case 12: case 13: // 110x xxxx 10xx xxxx char2 = str.charcodeat(i++); out += string.fromcharcode(((c & 0x1f) << 6) | (char2 & 0x3f)); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charcodeat(i++); char3 = str.charcodeat(i++); out += string.fromcharcode(((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0)); break; } } return out; }