使用FileReader在readAsBinaryString和readAsText之间的区别

时间:2012-02-19 02:11:37

标签: javascript string html5 utf typed-arrays

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

2 个答案:

答案 0 :(得分:15)

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

另一方面,

FileReader.readAsBinaryString正如它所说的那样。它逐字节读取文件。它不识别多字节字符,这对于二进制文件尤其是好消息(基本上除了文本文件之外的任何东西)。由于π是一个双字节字符,因此您将获得在字符串中组成的两个单独字节。

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

答案 1 :(得分:2)

哦,如果这就是你所需要的......:)

CF80是π的UTF-8编码。