Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№102-05-2006 12:44:13

Sky
Участник
 
Группа: Extensions
Откуда: Рязань
Зарегистрирован: 06-11-2004
Сообщений: 1378

Два вопроса по кодировками

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
Нас мало, но мы в кедах! ;)

Отсутствует

 

№202-05-2006 14:23:26

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Два вопроса по кодировками

Sky пишет

1.  Как можно перекодировать строку вида: тест в UTF-8? (между символами & и # точки нет, поставил потому, что в противном случае на странице отображается в нормальном виде)...

Сначала в unicode:

Выделить код

Код:

var a = "тест";
var b = a. replace
(
    /&#(\d+);/g,
    function ()
    {
        return (String. fromCharCode (arguments [1]));
    }
);
print (b);

или так:

Выделить код

Код:

var a = "тест";
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:

Выделить код

Код:

var b = window. convertFromUnicode ("UTF-8", "тест");
print (b);

Отредактировано Anton (02-05-2006 15:18:45)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№302-05-2006 18:55:26

Sky
Участник
 
Группа: Extensions
Откуда: Рязань
Зарегистрирован: 06-11-2004
Сообщений: 1378

Re: Два вопроса по кодировками

По первому вопросу:

Выделить код

Код:

var a = "&#1090;&#1077;&#1089;&#1090;";
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
Нас мало, но мы в кедах! ;)

Отсутствует

 

№402-05-2006 19:18:34

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Два вопроса по кодировками

Sky пишет

...

Выделить код

Код:

...
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ентов на части порвет !!!

Отсутствует

 

№502-05-2006 19:49:26

Sky
Участник
 
Группа: Extensions
Откуда: Рязань
Зарегистрирован: 06-11-2004
Сообщений: 1378

Re: Два вопроса по кодировками

Спасибо за объяснение.

А 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
Нас мало, но мы в кедах! ;)

Отсутствует

 

№602-05-2006 19:52:07

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Два вопроса по кодировками

Sky пишет

...
А convertFromUnicode так и не заработало...

Convert

...Кстати, Anton, у Вас FF 1.5.0.2? "Проверял на FF1.0.5.2," - наверно описка?

ага


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]