function string_to_utf8_hex_string(text) { var bytes1 = string_to_utf8_bytes (text); var hex_str1 = bytes_to_hex_string (bytes1); return hex_str1; } function utf8_hex_string_to_string(hex_str1) { var bytes2 = hex_string_to_bytes (hex_str1); var str2 = utf8_bytes_to_string (bytes2); return str2; } function utf8_bytes_to_string(arr) { if (arr == null) return null; var result = ""; var i; while (i = arr.shift()) { if (i <= 0x7f) { result += String.fromCharCode(i); } else if (i <= 0xdf) { var c = ((i & 0x1f) << 6); c += arr.shift() & 0x3f; result += String.fromCharCode(c); } else if (i <= 0xe0) { var c = ((arr.shift () & 0x1f) << 6) | 0x0800; c += arr.shift() & 0x3f; result += String.fromCharCode(c); } else { var c = ((i & 0x0f) << 12); c += (arr.shift() & 0x3f) << 6; c += arr.shift() & 0x3f; result += String.fromCharCode(c); } } return result; } function utf8_uint8array_to_string(arr) { if (arr == null) return null; var result = ""; for(var i=0;i> 6) & 0x1F) | 0xC0); result.push ((c & 0x3F) | 0x80); } else { result.push (((c >> 12) & 0x0F) | 0xE0); result.push (((c >> 6) & 0x3F) | 0x80); result.push ((c & 0x3F) | 0x80); } } return result; } function byte_to_hex(byte_num) { var digits = (byte_num).toString (16); if (byte_num <16) return '0' + digits; return digits; } function bytes_to_hex_string(bytes) { var result = "" ; for ( var i = 0; i