概述不同平台可能使用不同编码与 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(); }

发表评论 取消回复