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