feat: webui editing support multiple encodings (#197)

This commit is contained in:
sigoden 2023-03-17 11:22:21 +08:00 committed by GitHub
parent 10ec34872d
commit e43554b795
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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'
}