Skip to content

Instantly share code, notes, and snippets.

@lvisei
Last active March 15, 2021 02:13
Show Gist options
  • Save lvisei/4ce78aed287f2eb091cf9cbbe855b951 to your computer and use it in GitHub Desktop.
Save lvisei/4ce78aed287f2eb091cf9cbbe855b951 to your computer and use it in GitHub Desktop.
JavaScript UTF-8 decode
// ES5
function utf8Decode(str_data) {
let tmp_arr = [],
i = 0,
ac = 0,
c1 = 0,
c2 = 0,
c3 = 0;
str_data += "";
while (i < str_data.length) {
c1 = str_data.charCodeAt(i);
if (c1 < 128) {
tmp_arr[ac++] = String.fromCharCode(c1);
i++;
} else if (c1 > 191 && c1 < 224) {
c2 = str_data.charCodeAt(i + 1);
tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = str_data.charCodeAt(i + 1);
c3 = str_data.charCodeAt(i + 2);
tmp_arr[ac++] = String.fromCharCode(
((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)
);
i += 3;
}
}
return tmp_arr.join("");
}
//ES6
function utf8Decode(str_data) {
let tmp_arr = []
str_data += "";
for (let chart of str_data) {
const unicode = chart.codePointAt(0)
tmp_arr.push(String.fromCharCode(unicode))
}
return tmp_arr.join("");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment