Как получить код символа в нужной кодировке?
Здравствуйте.
Нужно нативными средствами (то есть, без костылей) получить код символа в нужной кодировке, например, CP866. Проблема в том, что в JS есть подходящая функция (TextEncoder), но она, в отличии от своей обратной функции (TextDecoder), не принимает параметр с кодировкой, и такое: let encoder = new TextEncoder('ibm866'); let uint8Array = encoder.encode('А'); console.log(uint8Array); Дает не: Uint8Array [ 128 ], а: Uint8Array [ 208, 144 ], так как используется UTF-8. Можно конечно сделать массив, и оттуда получать эти символы, но по некоторым причинам, это не желательно :( Если кто-то сможет подсказать, как это можно реализовать, буду очень признателен :) |
Никак. Ручками перекодировать. Таблицу делать. Обходя всякие препоны.
https://javascript.ru/forum/ajax/815...rchparams.html |
voraa, я так не играю... :no:
Значит развели over 9000 этих кодовых таблиц, а теперь простым трудягам в ручную писать? :( У TextDecoder почему-то есть указание кодировки, что им было сложно добавить обратный алгоритм в TextEncoder? В одной функции у них стандарт UTF-8, в другой UTF-16 (charCodeAt), что дальше? Такими темпами не то, что костыли или велосипеды писать нужно, а уже заводское производство их запускать :) |
Неверно - везде utf8:
alert([ 'A'.charCodeAt(0), 'A'.codePointAt(0) ].join('\n')) А вот на счёт TextEncoder согласен. Изначально в стандарте он как раз поддерживал любую кодировку, но у текущих товарищей у руля стандарта мания принудительного навязывания utf8, потому всё иное выпиливают со страшной силой. Тот же fetch из коробки уже не умеет ничего кроме utf8. Очевидно, что внутри браузера всё нужное для конвертации в любую сторону есть, но из-за такой политики приходится тащить кучу мусорного дублирующего кода. |
Цитата:
Aetae, попробуйте вернуть код русской А, результат 1040, а не 53392 (Hex: D0 90), это UTF-16, насколько я помню, или нет? Цитата:
|
Цитата:
А по поводу charCodeAt - вы правы, а я не прав. ..upd: Цитата:
|
Цитата:
TextDecoder переводит из каких то кодировок в Юникод в кодировку UTF16, в которой хранятся строки в javascript. Теперь представьте, что любую строку из javascript мы захотим преобразовать в CP866, win1251 и проч. Что делать с китайскими иероглифами? С греческими буквами? |
Цитата:
voraa, ну правильно, я же говорю, давайте будем сами делать костыли-велосипеды... То из 16 в 8, то еще куда-то... Они там сверху не могут порой по n лет что-то исправить (а скорее, не хотят). Зато фреймворки выходят со скоростью света :) P. S. Не сочтите за личное ;) просто так уже задолбало, то с Canvas, то с формами, то еще с чем-то. |
Цитата:
Javascript работает в Юникоде. Есть три основных способа кодирования символов в Юникоде. UTF32- самый универсальный, простой и быстрый. Но жрет много памяти. UTF8 - универсальный, памяти в большинстве случаев занимает меньше, но на компьютере обрабатывается медленнее. Ну и UTF16 - Не достаточно универсален (не все символы можно представить) но вполне удовлетворителен по памяти и времени) Цитата:
Ну вот надо строку в win1251 перевести, а в строке иероглиф. Что делать? Выбрасывать исключение? Заменять каким то кодом? (в Win1251 все коды заняты) |
Цитата:
В конце концов, JS один из самых гибких языков. Сейчас вот даже вопрос с генерацией таблицы в CP866 не так однозначен, нужно подумать, как лучше сделать :( |
Часовой пояс GMT +3, время: 21:54. |