<script>
function encode_utf8(rawtext) {
     rawtext = rawtext.replace(/\r\n/g,"\n");
     var utftext = "";
     for(var n=0; n<rawtext.length; n++)
         {
         //
         var c=rawtext.charCodeAt(n);
         // 0-127 => 1byte
         if (c<128)
             utftext += String.fromCharCode(c);
         // 127 - 2047 => 2byte
         else if((c>127) && (c<2048)) {
             utftext += String.fromCharCode((c>>6)|192);
             utftext += String.fromCharCode((c&63)|128);}
         // 2048 - 66536 => 3byte
         else {
             utftext += String.fromCharCode((c>>12)|224);
             utftext += String.fromCharCode(((c>>6)&63)|128);
             utftext += String.fromCharCode((c&63)|128);}
         }
     return utftext;
 }
 
 function decode_utf8(utftext) {
     var plaintext = ""; var i=0; var c=c1=c2=0;
     while(i<utftext.length)
         {
         c = utftext.charCodeAt(i);
         if (c<128) {
             plaintext += String.fromCharCode(c);
             i++;}
         else if((c>191) && (c<224)) {
             c2 = utftext.charCodeAt(i+1);
             plaintext += String.fromCharCode(((c&31)<<6) | (c2&63));
             i+=2;}
         else {
             c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2);
             plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63));
             i+=3;}
         }
     return plaintext;
 }
</script>