added utf-16-base64 example

This commit is contained in:
Rick van Lieshout 2021-09-23 14:20:12 +02:00
parent 512549b267
commit 037faf024e
2 changed files with 43 additions and 1 deletions

View File

@ -26,7 +26,8 @@ It also consolidates all relevant examples in 1 place
│ ├── async.js │ ├── async.js
│ ├── image.png │ ├── image.png
│ └── README.md │ └── README.md
│ └── encoding
│ └── utf-16-base64.js # an example showing how to encode/decode UTF-16 strings
├── js-ts-frameworks # JS-TS framework specific examples ├── js-ts-frameworks # JS-TS framework specific examples
│ ├── Angular │ ├── Angular
│ │ └── state │ │ └── state

View File

@ -0,0 +1,41 @@
/**
* Base 64 encodes UTF-16 encoded strings
*
* @param {*} string
* @return {*}
*/
function btoaUTF16(string) {
const charCodeArray = new Uint16Array(string.length);
// you could use a for loop without the split to move in the string for better performance
string.split("").forEach((_, index) => {
charCodeArray[index] = string.charCodeAt(index);
});
return btoa(String.fromCharCode(...new Uint16Array(charCodeArray.buffer)));
}
/**
* Decodes base64 encoded UTF-16 strings
*
* @param {*} encoded
* @return {*}
*/
function atobUTF16(encoded) {
binary = atob(encoded);
const bytes = new Uint16Array(binary.length);
// you could use a for loop without the split to move in the string for better performance
binary.split("").forEach((_, index) => {
bytes[index] = binary.charCodeAt(index);
});
return String.fromCharCode(...new Uint16Array(bytes.buffer));
}
// Our base64 string with weird chars
const encoded = btoaUTF16("HUË - Sársziget");
const decoded = atobUTF16(encoded);
console.log("encoded:", encoded);
console.log("decoded:", decoded);