概述不同平台可能使用不同编码与 BOM。本文演示读取、去除/添加 BOM 与转换为 UTF-8。读取与转换async function readText(path) {
const root = await navigator.storage.getDirectory();
const seg = path.split('/'); let dir = root; for (let i=0;i<seg.length-1;i++) dir = await dir.getDirectoryHandle(seg[i]);
const fh = await dir.getFileHandle(seg[seg.length-1]); const file = await fh.getFile();
const buf = new Uint8Array(await file.arrayBuffer());
const hasBOM = buf[0] === 0xEF && buf[1] === 0xBB && buf[2] === 0xBF;
const dec = new TextDecoder('utf-8');
return dec.decode(hasBOM ? buf.slice(3) : buf);
}
async function writeUTF8(path, text, addBOM = false) {
const root = await navigator.storage.getDirectory();
const seg = path.split('/'); let dir = root; for (let i=0;i<seg.length-1;i++) dir = await dir.getDirectoryHandle(seg[i], { create: true });
const fh = await dir.getFileHandle(seg[seg.length-1], { create: true });
const enc = new TextEncoder(); const data = enc.encode(text);
const ws = await fh.createWritable();
if (addBOM) await ws.write(new Uint8Array([0xEF,0xBB,0xBF]));
await ws.write(data); await ws.close();
}

发表评论 取消回复