Разница между readAsBinaryString и readAsText с использованием FileReader - PullRequest
6 голосов
/ 19 февраля 2012

Так, например, когда я читаю символ π (\u03C0) из Файла с использованием API FileReader, я получаю обратно символ пи, когда я читаю его, используя FileReader.readAsText(blob), что ожидается.Но когда я использую FileReader.readAsBinaryString(blob), я получаю результат \xcf\x80, который, кажется, не имеет видимой корреляции с пи-символом.В чем дело?(Вероятно, это связано с тем, как кодируется UTF-8/16 ...)

Ответы [ 2 ]

15 голосов
/ 19 февраля 2012

FileReader.readAsText учитывает кодировку файла. В частности, поскольку у вас есть файл, закодированный в UTF-8, может быть несколько байтов на символ. Читая это как текст, UTF-8 читается как есть, и вы получаете свою строку.

FileReader.readAsBinaryString, с другой стороны, делает именно то, что говорит. Он читает файл побайтно. Он не распознает многобайтовые символы, что, в частности, является хорошей новостью для двоичных файлов (в основном всего, кроме текстового файла). Так как & pi; двухбайтовый символ, вы получаете два отдельных байта, которые составляют его в вашей строке.

Эту разницу можно увидеть во многих местах. В частности, когда кодировка потеряна и вы видите символы, подобные & # xe9; отображается как & # xc3; & # xa9;.

2 голосов
/ 19 февраля 2012

Ну, хорошо, если это все, что вам нужно ...

...