function utf16to8(str){var out,i,len,c;out=[];len=str.length;for(i=0;i<len;i++){c=str.charCodeAt(i);if(c<=0x007f){out[i]=str.charAt(i);}else if(c>0x07ff){out[i]=String.fromCharCode(0xe0|((c>>12)&0x0f),0x80|((c>>6)&0x3f),0x80|(c&0x3f));}else{out[i]=String.fromCharCode(0xc0|((c>>6)&0x1f),0x80|(c&0x3f));}}
return out.join('');}

function utf8to16(str){var out,i,j,len,c;var c2,c3;out=[];len=str.length;i=j=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:out[j++]=str.charAt(i-1);break;case 12:case 13:c2=str.charCodeAt(i++);out[j++]=String.fromCharCode(((c&0x1f)<<6)|(c2&0x3f));break;case 14:c2=str.charCodeAt(i++);c3=str.charCodeAt(i++);out[j++]=String.fromCharCode(((c&0x0f)<<12)|((c2&0x3f)<<6)|(c3&0x3f));break;}}
return out.join('');}
