@technobuddha/library
Version:
A large library of useful functions
70 lines • 5.88 kB
JavaScript
const REPLACEMENT = 0xfffd;
/* eslint-disable no-bitwise */
/**
* Decode a UTF8 encoded string into unicode
*
* @param input - the utf encoded string
* @returns the decoded strings (which is encoded as UTF-16 by javascript)
*/
export function decodeUTF8(input) {
const buffer = ArrayBuffer.isView(input) ?
new Uint8Array(input.buffer, input.byteOffset, input.byteLength)
: new Uint8Array(input);
const result = [];
for (let i = 0; i < buffer.byteLength; ++i) {
let c0 = buffer[i];
let c1;
let c2;
let c3;
if (c0 > 0x7f) {
if (c0 > 0xbf && c0 < 0xe0) {
// two byte utf-8 sequence
c1 = buffer[++i];
c0 =
i >= buffer.byteLength || (c1 & 0x00c0) !== 0x80 ?
REPLACEMENT
: ((c0 & 0x1f) << 6) | (c1 & 0x3f);
}
else if (c0 >= 0xe0 && c0 < 0xf0) {
// three byte utf-8 sequence
c1 = buffer[++i];
c2 = buffer[++i];
c0 =
i >= buffer.byteLength || (c1 & 0xc0) !== 0x80 || (c2 & 0xc0) !== 0x80 ?
REPLACEMENT
: ((c0 & 0x0f) << 12) | ((c1 & 0x3f) << 6) | (c2 & 0x3f);
}
else if (c0 >= 0xf0 && c0 < 0xf8) {
// four byte utf-8 sequence
c1 = buffer[++i];
c2 = buffer[++i];
c3 = buffer[++i];
c0 =
(i >= buffer.byteLength ||
(c1 & 0xc0) !== 0x80 ||
(c2 & 0xc0) !== 0x80 ||
(c3 & 0xc0) !== 0x80) ?
REPLACEMENT
: ((c0 & 0x0f) << 18) | ((c1 & 0x3f) << 12) | ((c2 & 0x3f) << 6) | (c3 & 0x3f);
}
else {
c0 = REPLACEMENT;
}
}
// re-encode the result as UTF-16
if (c0 <= 0xffff) {
result.push(c0);
}
else if (c0 <= 0x0010ffff) {
c0 -= 0x00010000;
result.push((c0 >> 10) | 0xd800, (c0 & 0x03ff) | 0xdc00);
}
else {
result.push(REPLACEMENT);
}
}
// eslint-disable-next-line unicorn/prefer-code-point
return String.fromCharCode(...result);
}
/* eslint-enable no-bitwise */
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2RlLXV0ZjguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVjb2RlLXV0ZjgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBRTNCLCtCQUErQjtBQUMvQjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLEtBWWtCO0lBRWxCLE1BQU0sTUFBTSxHQUNWLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNsRSxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFMUIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDM0MsSUFBSSxFQUFFLEdBQVcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksRUFBVSxDQUFDO1FBQ2YsSUFBSSxFQUFVLENBQUM7UUFDZixJQUFJLEVBQVUsQ0FBQztRQUVmLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ2QsSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsMEJBQTBCO2dCQUMxQixFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLEVBQUU7b0JBQ0EsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7d0JBQ2hELFdBQVc7d0JBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFF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