( Подобные вопросы к этому были заданы в StackOverflow, но не совсем так. Ближайший, вероятно, " javascript, как преобразовать строку Unicode в ascii ", где уже есть замечание «это должно быть дубликат [лицензировать]». Я прочитал несколько похожих постов, но они не отвечают на мой конкретный вопрос. Я посмотрел на очень хорошем W3Schools сайте и имею также Гуглил это, но так и не нашел ответа. Так что любые намеки здесь будут очень благодарны.)
У меня есть массив байтов, передаваемых в кусок JavaScript. В JavaScript данные поступают в виде строки. Я не знаю механизм переноса, так как это из стороннего приложения. Я даже не знаю, является ли строка "широкой" или "узкой".
В моем JavaScript у меня есть код вроде b = str.charCodeAt(pos);
.
Моя проблема заключается в том, что значение байта, такое как 0x86 = 134, передается как символ 0x2020 = 8224. Это происходит потому, что мой оригинальный байт интерпретируется как латинский-1 (возможно) символ «кинжал», а затем переведено в эквивалентную кодовую точку Unicode. (Проблема может быть или не быть «ошибкой» JavaScript.) Подобные проблемы возникают с другими значениями, хотя диапазоны 0x00..0x7F и 0xA0..0xFF кажутся хорошими, но большинство значений от 0x80..0x9F затрагиваются, в в каждом случае значением представляется Unicode для оригинального Latin-1.
Другое наблюдение состоит в том, что длина строки - это то, что я ожидал бы для узкой строки, если бы длина была измерена в байтах. (С другой стороны, если length возвращает значение в абстрактных символах, это ничего мне не говорит.)
Таким образом, в JavaScript есть способ получить «сырые» байты в строке или получить код символа Latin-1 или ASCII напрямую, или преобразовать кодировки символов, или определить значение по умолчанию кодирование
Я мог бы написать свое собственное отображение, но я бы не хотел. Я ожидаю, что это то, что я в конечном итоге сделаю, но это похоже на клудж на клудж.
Я также выясняю, можно ли что-либо изменить в вызывающем приложении (поскольку это может быть передача данных в виде широкой строки, хотя я сомневаюсь в этом).
В любом случае, мне было бы интересно узнать, существует ли простое решение JavaScript или понять, почему его нет.
(Если бы входящие данные были символьными данными, было бы здорово иметь дело с Unicode. Но это не так, это просто поток двоичных данных.)
Спасибо.