@technobuddha/library
Version:
A large library of useful functions
72 lines • 6.14 kB
JavaScript
import { replacementCharacter } from "./unicode.js";
const replacement = replacementCharacter.codePointAt(0);
/* 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)
* @group Unicode
* @category Encoding
*/
export function decodeText(input, _encoding = 'utf8') {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2RlLXRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVjb2RlLXRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBELE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUUsQ0FBQztBQUV6RCwrQkFBK0I7QUFDL0I7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsS0FBdUMsRUFDdkMsWUFBMEIsTUFBTTtJQUVoQyxNQUFNLE1BQU0sR0FDVixXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbEUsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFCLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzNDLElBQUksRUFBRSxHQUFXLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLEVBQVUsQ0FBQztRQUNmLElBQUksRUFBVSxDQUFDO1FBQ2YsSUFBSSxFQUFVLENBQUM7UUFFZixJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLDBCQUEwQjtnQkFDMUIsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixFQUFFO29CQUNBLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJ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