]> OzVa Git service - ozva-cloud/commitdiff
fix: garbled characters caused by atob (#422)
author52funny <47419733+52funny@users.noreply.github.com>
Mon, 22 Jul 2024 10:10:01 +0000 (18:10 +0800)
committerGitHub <noreply@github.com>
Mon, 22 Jul 2024 10:10:01 +0000 (18:10 +0800)
assets/index.js

index 4143021a702c818a233f43db3eb03437a84e94a8..24883a02242af75085b76901adf0bee48d710676 100644 (file)
@@ -108,7 +108,7 @@ window.addEventListener("DOMContentLoaded", async () => {
     return;
   }
 
-  DATA = JSON.parse(atob($indexData.innerHTML));
+  DATA = JSON.parse(decodeBase64($indexData.innerHTML));
   DIR_EMPTY_NOTE = PARAMS.q ? 'No results' : DATA.dir_exists ? 'Empty folder' : 'Folder will be created when a file is uploaded';
 
   await ready();
@@ -910,3 +910,22 @@ function getEncoding(contentType) {
   }
   return 'utf-8';
 }
+
+// Parsing base64 strings with Unicode characters
+function decodeBase64(base64String) {
+  const binString = atob(base64String);
+  const len = binString.length;
+  const bytes = new Uint8Array(len);
+  const arr = new Uint32Array(bytes.buffer, 0, Math.floor(len / 4));
+  let i = 0;
+  for (; i < arr.length; i++) {
+    arr[i] = binString.charCodeAt(i * 4) |
+             (binString.charCodeAt(i * 4 + 1) << 8) |
+             (binString.charCodeAt(i * 4 + 2) << 16) |
+             (binString.charCodeAt(i * 4 + 3) << 24);
+  }
+  for (i = i * 4; i < len; i++) {
+    bytes[i] = binString.charCodeAt(i);
+  }
+  return new TextDecoder().decode(bytes);
+}