03.05.2010 12:30:09

UTF-8 (De)Kodierer

weniger reden - mehr Code:

Kodieren

Code:ausführenändernfunction encodeUTF8(str){ var ret = ""; for (var i = 0; i < str.length; i++){ var chr = str.charCodeAt(i); if (chr < 128){ ret += str.charAt(i); } else{ var blocks = new Array(); var beginn = 128; var plus = 128; while (beginn + chr > 255 - (plus >> 1)){ var last = (63 & chr) + 128; chr = chr >> 6; plus = plus >> 1; beginn += plus; blocks.push(last); } blocks.push(beginn + chr); for (var j = blocks.length - 1; j >= 0; j--){ ret += String.fromCharCode(blocks[j]); } } } return ret; };

Dekodieren

Code:ausführenändernfunction decodeUTF8(str){ var errorChar = String.fromCharCode(65533); var btes = new Array(str.length); for (var i = 0; i < str.length; i++){ btes[i] = str.charCodeAt(i); } var ret = ""; for (var i = 0; i < btes.length; i++){ if (btes[i] < 128){ ret += str.charAt(i); continue; } if (btes[i] < 192){ ret += errorChar; continue; } var block = btes[i]; var error = false; var length = 0; while ((((128>>length)|block) == block) && (block > 0)){ block -= 128>>length; length++; } for (var j = 1; j < length; j++){ var help = btes[i + j]; if (help < 128 || help >= 192){ error = true; break; } help -= 128; block = (block<<6) + help; } i += length - 1; if (error){ ret += errorChar; } else { ret += String.fromCharCode(block); } } return ret; };