【问题标题】:Difference between readAsBinaryString and readAsText using FileReader使用 FileReader 的 readAsBinaryString 和 readAsText 之间的区别
【发布时间】:2012-03-09 21:41:13
【问题描述】:

例如,当我使用 FileReader API 从文件中读取 π 字符 (\u03C0) 时,当我使用 FileReader.readAsText(blob) 读取它时,我将 pi 字符返回给我,这是预期的。但是当我使用FileReader.readAsBinaryString(blob) 时,我得到了\xcf\x80 的结果,这似乎与pi 字符没有任何明显的相关性。这是怎么回事? (这可能与 UTF-8/16 的编码方式有关……)

【问题讨论】:

  • CF80 是 π 的 UTF-8 编码。
  • ...哦,你是对的...谢谢!
  • ...这可能太明显了,但是如果您愿意,可以将其发布为答案。

标签: javascript string html utf typed-arrays


【解决方案1】:

FileReader.readAsText 考虑了文件的编码。特别是,由于您有以 UTF-8 编码的文件,因此每个字符可能有多个字节。将其作为文本读取,UTF-8 会按原样读取,然后您会得到您的字符串。

FileReader.readAsBinaryString,另一方面,完全按照它所说的去做。它逐字节读取文件。它不识别多字节字符,这对于二进制文件(基本上除了文本文件之外的任何东西)来说尤其是好消息。由于 π 是一个两字节字符,因此您会在字符串中获得组成它的两个单独字节。

这种差异可以在很多地方看到。特别是当编码丢失并且您看到像 é 这样的字符显示为 é。

【讨论】:

  • 谢谢...所以当我尝试将 \xA2 附加到 BlobBuilder 时,结果显示为 \xC2\xA2,因为它是 UTF-8 编码的,但我怎样才能找回 \xA2? (单字节字符)
  • 哦,我想我必须使用 ArrayBuffer 然后
【解决方案2】:

哦,好吧,如果这就是你所需要的……:)

CF80 是 π 的 UTF-8 编码。

【讨论】:

    猜你喜欢
    • 2018-09-17
    • 2023-03-27
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多