/ Published in: JavaScript
This is useful if you have a string where each character represents a byte like the one returned by getStringAt() in BinaryAjax.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
function readUTF16String(bytes, bigEndian) { var ix = 0; var offset1 = 1, offset2 = 0; if( bytes.slice(0,2) == "\xFE\xFF") { bigEndian = true; ix = 2; } else if( bytes.slice(0,2) == "\xFF\xFE") { bigEndian = false; ix = 2; } if( bigEndian ) { offset1 = 0; offset2 = 1; } var string = ""; for( ; ix < bytes.length; ix+=2 ) { var byte1 = bytes[ix+offset1].charCodeAt(0); var byte2 = bytes[ix+offset2].charCodeAt(0); var word1 = (byte1<<8)+byte2; if( byte1 < 0xD8 || byte1 >= 0xE0 ) { string += String.fromCharCode(word1); } else { ix+=2; var byte3 = bytes[ix+offset1].charCodeAt(0); var byte4 = bytes[ix+offset2].charCodeAt(0); var word2 = (byte3<<8)+byte4; string += String.fromCharCode(word1, word2); } } return string; }