>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Два вопроса по кодировками http://forum.mozilla-russia.org/viewtopic.php?id=10005 |
Sky > 02-05-2006 12:44:13 |
1. Как можно перекодировать строку вида: &.#1090;&.#1077;&.#1089;&.#1090; в UTF-8? (между символами & и # точки нет, поставил потому, что в противном случае на странице отображается в нормальном виде) 2. В Firefox 1.0.* в файле скрипта при выводе текста в оконный элемент приходилось пользоваться функцией перекодировки: Выделить код Код:function unescapeEx(str) { var converter = Components.classes['@mozilla.org/intl/texttosuburi;1'].createInstance(Components.interfaces.nsITextToSubURI); return converter.UnEscapeAndConvert('windows-1251', str); } В Firefox 1.5.0.* можно уже просто сохранять файлы *.js в UTF-8 и все работает без перекодировки. |
Anton > 02-05-2006 14:23:26 |
Sky пишет
Сначала в unicode: Выделить код Код:var a = "&#1090;&#1077;&#1089;&#1090;"; var b = a. replace ( /&#(\d+);/g, function () { return (String. fromCharCode (arguments [1])); } ); print (b); или так: Выделить код Код:var a = "&#1090;&#1077;&#1089;&#1090;"; var c = new XML ("<text>" + a + "</text>"); print ("cc: " + c. toString ()); а потом уже
организовать альтернативу, в зависимости от версии приложения ?
|
Sky > 02-05-2006 18:55:26 |
По первому вопросу: Выделить код Код:var a = "тест"; var b = a. replace ( /&#(\d+);/g, function () { return (String. fromCharCode (arguments [1])); } ); print (b); Сработало, большое спасибо. А можете объясни ть как это работает? А то пользоваться "магической последовательностью" просто, но как-то нехорошо . Хотелось бы понять.
Пишет, что нет такого свойства. ???
Можно, но неужели нет более простого, общего способа?!! Хотя, видимо, то, что в 1.0.* не отображалась правильно кириллица в UTF-8, был явный баг. Наверно в 1.5 исправили. Придется выкручиваться. |
Anton > 02-05-2006 19:18:34 |
Sky пишет
Метод replace осуществляет поиск и замену по регулярному выражению. Если вторым аргументом replace является функция, ей передаются: найденная строка (1-й аргумент, arguments [0]) и все найденные подстроки - $1 (2-й аргумент, arguments [1]), $2 (3-й аргумент, arguments [2]) и т. д. Найденная подстрока заменяется тем, что отдаст функция. В данном случае, у последовательностей &#abcd; заменяется на String. fromCharCode (abcd), т. е., unicode-символ с кодом abcd.
Проверял на FF1.5.0.2, на двух разных профилях - в обоих есть и работает. Ну, если нет, то вот это: Выделить код Код:var sc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Components. interfaces. nsIScriptableUnicodeConverter); sc. charset = "UTF-8"; var b = sc. ConvertFromUnicode ("тест"); print (b); думаю, наверняка сработает. p.s.: поправил последний кусок кода - там Convert..., а не convert... |
Sky > 02-05-2006 19:49:26 |
Спасибо за объяснение. А convertFromUnicode так и не заработало... (здесь я, правда, ошибся, пишет не "нет такого свойства", а "Ошибка: sc.convertFromUnicode is not a function"). |
Anton > 02-05-2006 19:52:07 |
Sky пишет
Convert
ага |