Разница между readAsBinaryString и readAsText с помощью FileReader

Итак, в качестве примера, когда я читаю π-символ (u03C0) из файла, использующего API FileReader, я получаю символ pi обратно ко мне, когда я читаю его с помощью FileReader.readAsText(blob), который ожидается. Но когда я использую FileReader.readAsBinaryString(blob), Я получаю результат xcfx80 вместо этого, который, похоже, не имеет видимой корреляции с символом pi. Что происходит? (Вероятно, это связано с тем, как кодируется UTF-8/16...)

2 ответов


Ну, если это все, что вам нужно... :)

CF80 - кодировка UTF-8 для π.


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

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

это различие можно увидеть во многих местах. В частности, когда кодировка потеряна, и вы видите символы, такие как é, отображаемые как é.