Есть `ArrayBuffer`, в который сваливается UTF-16 LE или BE, иногда с нарушениями суррогатных пар (потому и не строка с бинарными данными, ибо например Хром на такое нормально реагирует, а Файерфокс пытается сделать что-то умное и портит данные).
Поверх `ArratBuffer` работает `UInt16Array`.
Дык вот, у данных впереди идёт BOM. И нужно в соответствии с ним и с endianness платформы поменять (или не поменять, но данные чаще BE, а платформа обычно LE, так что чаще поменять) endianness у 16-битных слов этого масива.
В лоб — `UInt8Array` и ручками в цикле на JS. Либо `UInt16Array` со сдвигами, но тоже в цикле и ручками.
Но массив может быть запросто мегабайт 15. Как-нибудь побыстрее и поизящнее его продрючить можно?