XML данные с сайта Gismeteo. Кодировка города
Данные по адресу http://informer.gismeteo.ru/xml/27612_1.xml
Название города sname="%CC%EE%F1%EA%E2%E0" выглядит вот так. Как сделать из этого читабельный вид? Пробывал document.write(unescape('%CC%EE%F1%EA%E2%E0')); document.write(escape('%CC%EE%F1%EA%E2%E0')); document.write(encodeURI('%CC%EE%F1%EA%E2%E0')); ничего не выходит. Что не так? |
О, да, это фишка Гисметео. XML передается в utf-8, а имя города хранится в windows-1251.
Попробуйте вот такой костыль: function win1251unescape(str){ var convTable = [0x402,0x403,0x201A,0x453,0x201E,0x2026,0x2020,0x2021,0x20AC,0x2030,0x409,0x2039,0x40A,0x40C,0x40B,0x40F,0x452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,0x20,0x2122,0x459,0x203A,0x45A,0x45C, 0x45B,0x45F,0xA0,0x40E,0x45E,0x408,0xA4,0x490,0xA6,0xA7,0x401,0xA9,0x404,0xAB,0xAC,0xAD,0xAE,0x407,0xB0,0xB1,0x406,0x456,0x491,0xB5,0xB6,0xB7,0x451,0x2116,0x454,0xBB,0x458,0x405,0x455,0x457,0x410, 0x411,0x412,0x413,0x414,0x415,0x416,0x417,0x418,0x419,0x41A,0x41B,0x41C,0x41D,0x41E,0x41F,0x420,0x421,0x422,0x423,0x424,0x425,0x426,0x427,0x428,0x429,0x42A,0x42B,0x42C,0x42D,0x42E,0x42F,0x430,0x431, 0x432,0x433,0x434,0x435,0x436,0x437,0x438,0x439,0x43A,0x43B,0x43C,0x43D,0x43E,0x43F,0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,0x448,0x449,0x44A,0x44B,0x44C,0x44D,0x44E,0x44F] return str.replace(/%([0-9A-F]{2})/gi, function(nothing, charCodeStr){ var charCode = parseInt(charCodeStr, 16); if (charCode < 0x7f){ return String.fromCharCode(charCode); } else { return String.fromCharCode(convTable[charCode - 128]); } }); }; alert(win1251unescape('%CC%EE%F1%EA%E2%E0')) |
Ура! Спасибо огромное, все получилось. Вот только вместо пробелов выходят плюсы. Например Нижний+Новгород. Надо еще что-то добавить?
|
Да, в шестой строке
return str.replace(/%([0-9A-F]{2})/gi, function(nothing, charCodeStr){ заменить на return str.replace(/\+/g, '%20').replace(/%([0-9A-F]{2})/gi, function(nothing, charCodeStr){ |
Часовой пояс GMT +3, время: 20:09. |