【问题标题】:Java Script File Reader class is not reading the contents properlyJava Script File Reader 类未正确读取内容
【发布时间】:2021-07-15 13:48:54
【问题描述】:

我正在使用编码类型为“UTF-8”的 FileReader 类(java 脚本)中的 readAsText 方法从客户端读取文件。它适用于所有类型的 ascii 值从 1 到 65000 的字符。我唯一的问题是,当我从文件中逐块读取时,任何 char 在 3000 之后都有 ascii 值有时无法正确读取,经过调查,我发现只有当我读取大文件并且特定的字符意外地作为一个块的第一个字母时才会发生这种情况。我用多个文件块进行了测试。并非所有块都发生此问题,而是在 10 个块中发生 1 个或 2 个块。这很奇怪。我在这里错过了什么吗?我们还有其他选择来读取 Java 脚本中的本地文件吗?任何帮助将不胜感激。

【问题讨论】:

  • 请提供代码和示例数据

标签: javascript utf-8 filereader


【解决方案1】:

这可能是一种解决方案

new Blob(['hi']).text().then(console.log)

这是另一个,不是那么跨浏览器友好...但这可以工作...

new Blob(['foo']) // or new File(['foo'], 'test.txt')
  .stream()
  .pipeThrough(new TextDecoderStream('utf-8'))
  .pipeTo(new WritableStream({
    write(part) {
      console.log(part)
    }
  }))

另一个不依赖于 WritableStream 或 TextDecoderStream 的较低级别的解决方案是使用常规 TextDecoder 和流选项

var res = ''
const decoder = new TextDecoder()
res += decoder.decode(chunk1, { stream: true })
res += decoder.decode(chunk2, { stream: true })
res += decoder.decode(chunk3, { stream: true })
res += decoder.decode() // flush the end

你如何获得每个块可以是使用new Response(blob).bodyblob.stream() 或简单地使用blob.slice(start, end) 切片blob 并使用FileReader.prototype.readAsArrayBuffer()

【讨论】:

    猜你喜欢
    • 2011-12-22
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    相关资源
    最近更新 更多