Javascript utf windows 1251

TextDecoder и TextEncoder

Что если бинарные данные фактически являются строкой? Например, мы получили файл с текстовыми данными.

Встроенный объект TextDecoder позволяет декодировать данные из бинарного буфера в обычную строку.

Для этого прежде всего нам нужно создать сам декодер:

  • label – тип кодировки, utf-8 используется по умолчанию, но также поддерживаются big5 , windows-1251 и многие другие.
  • options – объект с дополнительными настройками:
    • fatal – boolean, если значение true , тогда генерируется ошибка для невалидных (не декодируемых) символов, в ином случае (по умолчанию) они заменяются символом \uFFFD .
    • ignoreBOM – boolean, если значение true , тогда игнорируется BOM (дополнительный признак, определяющий порядок следования байтов), что необходимо крайне редко.

…и после использовать его метод decode:

  • input – бинарный буфер ( BufferSource ) для декодирования.
  • options – объект с дополнительными настройками:
    • stream – true для декодирования потока данных, при этом decoder вызывается вновь и вновь для каждого следующего фрагмента данных. В этом случае многобайтовый символ может иногда быть разделён и попасть в разные фрагменты данных. Это опция указывает TextDecoder запомнить символ, на котором остановился процесс, и декодировать его со следующим фрагментом.

Мы можем декодировать часть бинарного массива, создав подмассив:

TextEncoder

TextEncoder поступает наоборот – кодирует строку в бинарный массив.

Имеет следующий синтаксис:

Поддерживается только кодировка «utf-8».

Кодировщик имеет следующие два метода:

  • encode(str) – возвращает бинарный массив Uint8Array , содержащий закодированную строку.
  • encodeInto(str, destination) – кодирует строку ( str ) и помещает её в destination , который должен быть экземпляром Uint8Array .

Форум

Справочник

Кодировка: русский текст

При использовании Google Closure Compiler, как впрочем и других аналогичных упаковщиков, основанных на Rhino, возникают некоторые проблемы с русским текстом.

Эта статья содержит рецепты, как их легко преодолеть.

Сжатие в кодировке: windows-1251

Если вы попробуете сжать javascript, в котором присутствуют русские буквы в кодировке windows-1251, то на выходе вместо русского текста получите «кракозяблы». Это нормально.

Для того, чтобы произвести правильную обработку, необходимо для начала перевести файл в промежуточный ASCII-формат. Это умеет делать утилита native2ascii , которая распространяется вместе с JDK.

Читайте также:  Дизайн клавиатуры windows 10

То есть, обычной JRE (Java Runtime Environment) не хватит, нужно поставить JDK, и там, в директории bin, будет лежать эта утилита.

На входе: file.js

Теперь полученный файл в формате ASCII можно смело передавать компилятору:

На выходе: file.ascii.compiled.js

И теперь — возвращаем файл из промежуточного формата обратно, в родной windows-1251:

Получили результат — сжатый файл в кодировке windows-1251.

Пакетный файл

Вот небольшой пакетный файл под windows для сжатия. Предполагается, что путь к native2ascii (к директории bin в JDK) у вас в переменной PATH .

Использование для файла file.js :

Готовый файл будет file.compiled.js .

Сжатие в кодировке UTF-8

C кодировкой UTF-8 все немного проще. Мы можем скормить файл компилятору сразу же. Единственно, результат будет такой:

То есть, вместо UTF-символов мы имеем их запись в виде ASCII.

Для приведения такого файла к нормальному виду достаточно пропустить его через native2ascii без указания кодировки:

После этого полученный файл будет в кодировке UTF-8.

На этом проблемы с кодировкой должны быть исчерпаны.

native2ascii работает только в составе пакета или нет? Если нет? скиньте файл или ссылку на него на мыло, спасибо.

А где взять этот native2asci?

Перефразирую свой вопрос: есть ли аналоги native2ascii? Совершенно не хочется на сервере ставить JDK из-за этой приблуды.

Вот простенький заменитель native2ascii на javascript под Windows Script Host.
Запуск: cscript.exe native2ascii.js

Оказалось, что текст сохраняется в Windows-1251. Вот исправленный скрипт:

Я так понимаю, что можно еще конвертировать скрипты в UTF-8, обрабатывать упаковщиком и переконвертировать обратно в Win-1251?

Кстати, native2ascii входит в состав дефолтных команд Apache Ant. Так что если вы юзаете ант для сжатия js, это может выглядеть примерно так:

Пример для скриптов в UTF-8.

Если JDK не установлен, на задании native2ascii билдер будет вылетать с ошибкой.

То есть нет никакого значка чтоб java-всемогущий понял следующий текст как записанный пользователем уже в unicode? без скармливания каким-то программам? грошёвый продукт, если так

Хм, у меня по-умолчанию при написании:
native2ascii -reverse
он кодируется в win-1251.
Чтобы в utf-8 получить, необходимо написать:
native2ascii -reverse -encoding utf-8

для сжатия win-1251 достаточно указать ключ —charset WINDOWS-1251, а для UTF-8, соответственно —charset UTF-8 без всяких прыжков с переворотом.

Читайте также:  Аналоги sketchup для линукс

Это действительно работает, неплохо бы автор исправил статью, чтобы не вводить новичков вроде меня в заблуждение %)

Изменить кодировку в nodejs. CP1251/1252 в UTF-8

Никак не получается изменить кодировку, у меня есть парсер, выводит информацию в консоль в нормальном виде (кодировка либо CP1251, либо CP1252), но эту информацию мне надо отправлять в телеграмм по API. Мне вылазит ошибка, что кодировка должна быть UTF-8.

Если делать так:

то выводит иероглифы

2 ответа 2

Вот простой пример для iconv-lite

Ответ, отмеченный, как принятый — полный привет логике, и полное досвидание производительности.

Проблема решается неочевидно. Помимо кодировки исходника (исходные данные на источнике), многое зависит от того, каким инструментом забираете источник: node-fetch , request , axios , unirest . В случае, если данные читаются из файла, там данное решение тоже пройдет, но. там отдельная история.

Суть проблемы в том, что Привет может прилететь и из заголовков ( headers ) ответа ( response ) и даже из содержимого ответа (в случае XML — обязательно). Я двое суток смотрел на буквы э на местах всех кириллических знаков, пока не расковырял исходники всех этих фетчей и реквестов, которые думать не думают о других кодировках, кроме utf8 и других форматах данных, кроме json , и то — JSON обязательно должен быть utf8 , даже Unicode ему нельзя быть. Как в песенке про папу, который может быть кем угодно, но мамой не может быть. Хуже всего, если все-таки — думают, но полагают, что все решено.

Далее, важно в какой консоли вы смотрите ответы Ноды: Windows (XP, Vista, 7|8, 10 — ждут сюрпризы), xterm? У Вас LINUX! О! Как хорошо, что Вы не знаете, что такое KOI-8, а Ваши учителя даже про KOI-7. Относительно ровно предсказать вывод без танцев с большим шаманским бубном можно в консолях RHEL^7(CentOs^7, Fedora^17), Ubuntu^12, MacOs^X. С другими не знаком, либо неоднозначно.

Еще вопрос — удалённо если смотрите на терминал, то какой протокол, какой терминальный клиент? Допустим, что с терминалом и кодировками на терминале хорошо.

Ожидаемое решение можно получить только ручками через нативный http или node-fetch, и только тогда, когда входные данные обрабатываются как буфер.

Вот рабочий макет для песочницы. Просто поиграйтесь с вариантами (ответы функции cnw8 ), которых на просторах интернетов вагон. Почти все они — неправильные, работают только два: один здесь, а другой у Майкла Джексона.

Читайте также:  После установки windows 10 компьютер зависает намертво

javascript utf 8 windows 1251

//utf8 to 1251 converter (1 byte format, RU/EN support only + any other symbols) by drgluck
function utf8_decode (aa) 1024) else if (c == 1105)
bb += String.fromCharCode(c — 848);
>
> else
>
return bb;
>
  • © 2019 GitHub, Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

I need to convert string in UTF-8 to byte array in 1251 codepage in JavaScript. Google says nothing useful. Help 🙂

EDIT: What is it for.

We have server and client. Server has userpasswords hased with SHA512 and 1251 codepage. Client (web browser) has to hash passwords (provided by user in plain text) with SHA512 and transmit it to the server. The problem is: browser works in UTF-8 encoding, and of course SHA512 in UFT-8 is not the same as SHA512 in 1251. Any Ideas?

Был случай, да он у каждого сайтостроителя был и будет всегда — это объявление кодировки javascript в html файле. в интернете есть много советов, но в основном многие из них устарели. читаем как сделал я.

В случае, если у вас файл на ява скрипте пришел в utf-8, а главный файл в windows-1251, то при выводе русских символов выходят крякозябры. Чтобы этого избежать делайте простое объявление кодировки в javascript:

Вот и все и будет вас счастье)

Более новые статьи:

  • Типы данных в JavaScript (EcmaScript) знать обязательно перед его изучением этого языка на практике. …

«>Типы данных в EcmaScript — 23/02/2017 08:49
Часто мелочевые ошибки при программировании на javascript рушат весь сайт. Самые популярные будем разбирать в этой статье. …

«>Популярные ошибки яваскрипта — 20/12/2015 16:38
Очень эффектно смотрится ссылка «Добавить сайт в избранное» и рядом можно еще фоновое завлекающее изображение поставить. Многие говорят, что это не вл …

Оцените статью