FileReader 读取txt文件中文乱码

发布时间 2023-06-07 17:04:37作者: demo_you

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
  })
}