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