FileReader
readAsText 可以读取文件内容
但是在windows电脑下,用户新建的文本文档(.txt)的编码可能不是UTF-8,可能是ANSI,当非UTF-8时,读出来的中文就会乱码。
我们可以利用正则和 readAsText的第二个参数解决这个问题。
export const readFile = (file: File) => {
return new Promise<string>((resolve, reject) => {
const reader = new FileReader()
reader.readAsText(file, 'UTF-8')
reader.onload = (e) => {
const txt = (e.target?.result || '') as string
const isChinese = /[\u4e00-\u9fa5]/gi
if (isChinese.test(txt)) {
resolve(txt)
return
}
const reader2 = new FileReader()
reader2.readAsText(file, 'gb2312')
reader2.onload = (e2) => {
const txt2 = (e2.target?.result || '') as string
resolve(txt2)
}
}
reader.onerror = reject
})
}