03.05.2010 12:30:09
UTF-8 (De)Kodierer
weniger reden - mehr Code:
Kodieren
Code:
function 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:
function 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;
};