From c358c9d103beaafb1dded42fd142f2ede9482598 Mon Sep 17 00:00:00 2001 From: Sebastian Wentworth <110143758+wangyinyuan@users.noreply.github.com> Date: Thu, 20 Feb 2025 14:20:17 +0800 Subject: [PATCH] fix: correct Chinese and special characters display in HTML renderer --- src/renderers/html/index.tsx | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/renderers/html/index.tsx b/src/renderers/html/index.tsx index 87c18d0..519c2ba 100644 --- a/src/renderers/html/index.tsx +++ b/src/renderers/html/index.tsx @@ -8,22 +8,18 @@ const HTMLRenderer: DocRenderer = ({ mainState: { currentDocument } }) => { const b64String = currentDocument?.fileData as string; let encoding = ""; - const bodyBase64 = - b64String?.replace( - /^data:text\/html;(?:charset=([^;]*);)?base64,/, - (_, charset) => { - encoding = charset; - return ""; - }, - ) || ""; + const bodyBase64 = b64String?.replace( + /^data:text\/html;(?:charset=([^;]*);)?base64,/, + (_, charset) => { + encoding = charset || "utf-8"; + return ""; + }, + ); let body: string = window.atob(bodyBase64); - if (encoding) { - // decode charset - const buffer = new Uint8Array(body.length); - for (let i = 0; i < body.length; i++) buffer[i] = body.charCodeAt(i); - body = new TextDecoder(encoding).decode(buffer); - } + // decode charset + const buffer = Uint8Array.from(body, (c) => c.charCodeAt(0)); + body = new TextDecoder(encoding).decode(buffer); const iframeCont = document.getElementById( "html-body",