From e43554b7952453463d894097f443b3387f5ebb9d Mon Sep 17 00:00:00 2001 From: sigoden Date: Fri, 17 Mar 2023 11:22:21 +0800 Subject: [PATCH] feat: webui editing support multiple encodings (#197) --- assets/index.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/assets/index.js b/assets/index.js index e3c6757..9f10fc4 100644 --- a/assets/index.js +++ b/assets/index.js @@ -535,8 +535,15 @@ async function setupEditPage() { try { const res = await fetch(baseUrl()); await assertResOK(res); - const text = await res.text(); - $editor.value = text; + const encoding = getEncoding(res.headers.get("content-type")); + if (encoding === "utf-8") { + $editor.value = await res.text(); + } else { + const bytes = await res.arrayBuffer(); + const dataView = new DataView(bytes) + const decoder = new TextDecoder(encoding) + $editor.value = decoder.decode(dataView); + } } catch (err) { alert(`Failed get file, ${err.message}`); } @@ -796,3 +803,14 @@ async function assertResOK(res) { throw new Error(await res.text()) } } + +function getEncoding(contentType) { + const charset = contentType?.split(";")[1]; + if (/charset/i.test(charset)) { + let encoding = charset.split("=")[1]; + if (encoding) { + return encoding.toLowerCase() + } + } + return 'utf-8' +} \ No newline at end of file