Страницы: 1
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 и все работает без перекодировки.
Так вот в чем вопрос - как сделать, чтобы и в 1.0.* и в 1.5.0.* расширение работало нормально. А то делаешь одним способом в 1.0 работает нормально, в 1.5 кракозяблы, делаешь другим - наоборот.
Отредактировано Sky (02-05-2006 12:53:40)
Gentoo Linux 2007-03-23 by XOR
Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b3pre) Gecko/2008010104
Нас мало, но мы в кедах! ;)
Отсутствует
1. Как можно перекодировать строку вида: тест в UTF-8? (между символами & и # точки нет, поставил потому, что в противном случае на странице отображается в нормальном виде)...
Сначала в unicode:
var a = "тест"; 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 ());
а потом уже
...
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 и все работает без перекодировки.
Так вот в чем вопрос - как сделать, чтобы и в 1.0.* и в 1.5.0.* расширение работало нормально. А то делаешь одним способом в 1.0 работает нормально, в 1.5 кракозяблы, делаешь другим - наоборот.
организовать альтернативу, в зависимости от версии приложения ?
Пока тестировал код, обнаружил метод окна convertFromUnicode:
Отредактировано Anton (02-05-2006 15:18:45)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
По первому вопросу:
var a = "тест"; var b = a. replace ( /&#(\d+);/g, function () { return (String. fromCharCode (arguments [1])); } ); print (b);
Сработало, большое спасибо. А можете объясни ть как это работает? А то пользоваться "магической последовательностью" просто, но как-то нехорошо . Хотелось бы понять.
window. convertFromUnicode
Пишет, что нет такого свойства. ???
организовать альтернативу, в зависимости от версии приложения
Можно, но неужели нет более простого, общего способа?!! Хотя, видимо, то, что в 1.0.* не отображалась правильно кириллица в UTF-8, был явный баг. Наверно в 1.5 исправили. Придется выкручиваться.
Gentoo Linux 2007-03-23 by XOR
Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b3pre) Gecko/2008010104
Нас мало, но мы в кедах! ;)
Отсутствует
...
Выделить кодКод:
... var b = a. replace ( /&#(\d+);/g, function () { return (String. fromCharCode (arguments [1])); } ); ......как это работает?...
...
Метод replace осуществляет поиск и замену по регулярному выражению. Если вторым аргументом replace является функция, ей передаются: найденная строка (1-й аргумент, arguments [0]) и все найденные подстроки - $1 (2-й аргумент, arguments [1]), $2 (3-й аргумент, arguments [2]) и т. д. Найденная подстрока заменяется тем, что отдаст функция. В данном случае, у последовательностей &#abcd; заменяется на String. fromCharCode (abcd), т. е., unicode-символ с кодом abcd.
...
window. convertFromUnicode
Пишет, что нет такого свойства. ???
...
Проверял на 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...
Отредактировано Anton (02-05-2006 19:53:12)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Спасибо за объяснение.
А convertFromUnicode так и не заработало... (здесь я, правда, ошибся, пишет не "нет такого свойства", а "Ошибка: sc.convertFromUnicode is not a function").
Ну да ладно, первый способ работает.
Кстати, Anton, у Вас FF 1.5.0.2? "Проверял на FF1.0.5.2," - наверно описка?
Gentoo Linux 2007-03-23 by XOR
Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b3pre) Gecko/2008010104
Нас мало, но мы в кедах! ;)
Отсутствует
...
А convertFromUnicode так и не заработало...
Convert
...Кстати, Anton, у Вас FF 1.5.0.2? "Проверял на FF1.0.5.2," - наверно описка?
ага
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Страницы: 1