Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Перевод строки в коды


Автор: Rickert 12.2.2009, 11:04
Вообще не могу сообразить. Есть строка:
"Центр: +31 C° Аэропорт: +30 C° 2 Академгородок: +30 C° Кэш & Керри, Трактовая 18: +31 C°"
В БД она хранится в таком виде:
"%D6%E5%ED%F2%F0%3A+%2B%33%31+%43%B0+++%0D%0A%C0%FD%F0%EE%EF%EE%F0%F2%3A+%2B%33%30+%43%B0+%32+%0D%0A%C0%EA%E0%E4%E5%EC%E3%EE%F0%EE%E4%EE%EA%3A+%2B%33%30+%43%B0+++%0D%0A%CA%FD%F8+%26+%CA%E5%F0%F0%E8%2C+%D2%F0%E0%EA%F2%EE%E2%E0%FF+%31%38%3A+%2B%33%31+%43%B0+%0D%0A"
Как в JavaScript конвертнуть обычную строку (var tmp="Центр") в другую кодировку, да так чтобы без самописных функций?
С первого взгляда - URL коды, но ни encodeURI, ни encodeURIComponent не спасают. Может тут кто с орлинным глазом и подскажем кодировку?

Автор: Rickert 12.2.2009, 11:51
Как оказалось - это quoted printable кодировка. Через что её юзать в js?

Добавлено через 4 минуты и 27 секунд
Или нет? ХЗ, "Штрилиц" сказал что quoted printable (percent)

Автор: ksnk 12.2.2009, 12:15
Вообще-то это последствия применения urlencode. Соответственно urldecode поможет на PHP шной стороне получить чего-то похожее на правду.

Хотя лучше бы в таком виде в базе не хранить, слишком многа букав... smile

Автор: Rickert 12.2.2009, 12:20
Вообщем всё ясно. Засунув строку в http://www.encodeurl.com
Мы понимаем, что это всё-так URL кодирование. Но вопрос: какого чёрта, я вот сейчас создаю ява скрипт файл, затем пишу:
Код

...
var tmp="Центр"
var res = decodeURI(encodeURI(tmp));
...

В результате в res - фигня какя-то?

Автор: ksnk 12.2.2009, 12:20
Если нужно обязательно на JS стороне, то "перекодировать" по таблице перекодировки. заменить все символы %XX на значения в UTF. Таблицу брать из jsHttpRequest'а к примеру:
Код

    /**
     * UCS-2BE -> 1-byte encodings (from #128).
     */
    var $_encTables = array(
        'windows-1251' => array(
            0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
            0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
            0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
            0x0098, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
            0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
            0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
            0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
            0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
            0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
            0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
            0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
            0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
            0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
            0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
            0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
            0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
        ),


Немного навыков слесарных и золотой ключик в кармане smile

Автор: mogul82 12.2.2009, 12:42
Цитата

В результате в res - фигня какя-то?

Плохо настроенна кодировка. Попробуй в htaccess прописать кодировку.

Автор: Rickert 12.2.2009, 12:58
Да, как оказалось encodeURI() - кодирует UTF-8 в URL коды. Теперь получается надо перевести UTF-8 в, как вы утверждаете, windows-1251.
А это таблица сооветствия кого чему и как её юзать?

Добавлено через 4 минуты и 59 секунд
Цитата(mogul82 @  12.2.2009,  12:42 Найти цитируемый пост)
Плохо настроенна кодировка. Попробуй в htaccess прописать кодировку.

Этот вопрос уже решён. Я набирал текст в far'е, а там досовская кодировка была.
Вопрос про перевод URI кодов от UTF-8 в windows-1251 - в силе.

Добавлено через 10 минут и 49 секунд
Код на просторах сети нашёл:
Код
var trans = []; trans[0x401] = 0xA8; trans[0x451] = 0xB8;
for (var i = 0x410; i <= 0x44F; i++) trans[i] = i - 0x350; // >

function myEscape (str) {
    var ret = [];
    for (var i = 0; i < str.length; i++) {
    var n = str.charCodeAt(i);
    if (typeof trans[n] != 'undefined') n = trans[n];
    if (n <= 0xFF) ret.push(n);
}
return escape(String.fromCharCode.apply(null, ret));
}

Даже думать сейчас не хочу ка это работает, просто вписал и всё как надо. Я домой, бывайте, всем спасибо! smile 

Автор: mogul82 12.2.2009, 13:27
Цитата

Этот вопрос уже решён. Я набирал текст в far'е, а там досовская кодировка была


Ну, вот и причина. Переведи текстовые файлы в UTF-8, и пропиши кодировку в htacces. Не забудь проверить БД.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)