Javascript перекодировка utf 8 в windows 1251
Форум
Справочник
Кодировка: русский текст
При использовании Google Closure Compiler, как впрочем и других аналогичных упаковщиков, основанных на Rhino, возникают некоторые проблемы с русским текстом.
Эта статья содержит рецепты, как их легко преодолеть.
Сжатие в кодировке: windows-1251
Если вы попробуете сжать javascript, в котором присутствуют русские буквы в кодировке windows-1251, то на выходе вместо русского текста получите «кракозяблы». Это нормально.
То есть, обычной JRE (Java Runtime Environment) не хватит, нужно поставить JDK, и там, в директории bin, будет лежать эта утилита.
Теперь полученный файл в формате ASCII можно смело передавать компилятору:
На выходе: file.ascii.compiled.js
Пакетный файл
Использование для файла file.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? без скармливания каким-то программам? грошёвый продукт, если так
Это действительно работает, неплохо бы автор исправил статью, чтобы не вводить новичков вроде меня в заблуждение %)
Decode UTF-8 with Javascript
I have Javascript in an XHTML web page that is passing UTF-8 encoded strings. It needs to continue to pass the UTF-8 version, as well as decode it. How is it possible to decode a UTF-8 string for display?
13 Answers 13
To answer the original question: here is how you decode utf-8 in javascript:
We have been using this in our production code for 6 years, and it has worked flawlessly.
Note, however, that escape() and unescape() are deprecated. See this.
Also see the related questions: here and here
Perhaps using the textDecoder will be sufficient.
Not supported in IE though.
Handling non-UTF8 text
In this example, we decode the Russian text «Привет, мир!», which means «Hello, world.» In our TextDecoder() constructor, we specify the Windows-1251 character encoding, which is appropriate for Cyrillic script.
The interface for the TextDecoder is described here.
Retrieving a byte array from a string is equally simpel:
If you have it in a different encoding then you must compensate for that upon encoding. The parameter in the constructor for the TextEncoder is any one of the valid encodings listed here.
Here is a solution handling all Unicode code points include upper (4 byte) values and supported by all modern browsers (IE and others > 5.5). It uses decodeURIComponent(), but NOT the deprecated escape/unescape functions:
Tested and available on GitHub
To create UTF-8 from a string:
Tested and available on GitHub
Update @Albert’s answer adding condition for emoji.
@albert’s solution was the closest I think but it can only parse up to 3 byte utf-8 characters
EDIT: fixed the issue that @unhammer found.
// String to Utf8 ByteBuffer
// Utf8 ByteArray to string
This is what I found after a more specific Google search than just UTF-8 encode/decode. so for those who are looking for a converting library to convert between encodings, here you go.
Paste from repo readme
All encodings from the Encoding specification are supported:
utf-8 ibm866 iso-8859-2 iso-8859-3 iso-8859-4 iso-8859-5 iso-8859-6 iso-8859-7 iso-8859-8 iso-8859-8-i iso-8859-10 iso-8859-13 iso-8859-14 iso-8859-15 iso-8859-16 koi8-r koi8-u macintosh windows-874 windows-1250 windows-1251 windows-1252 windows-1253 windows-1254 windows-1255 windows-1256 windows-1257 windows-1258 x-mac-cyrillic gb18030 hz-gb-2312 big5 euc-jp iso-2022-jp shift_jis euc-kr replacement utf-16be utf-16le x-user-defined