Пишу расширение для Firefox и столкнулся с такой проблемой:
Есть в расширении строка для ввода текста, нужно перенаправить пользователя на определённую страничку передав туда этот текст прямо в строке адреса, который имеет примерно следущий вид
http://host/script?str=%CF%F0%E8%E2%E5%F2
Когда у пользователя стоит, например, русский Windows, то всё хорошо, т.е. введённые символы имеют код меньше 256 и кодируются одной последовательностью вида %NN, но в остальных случаях уже хуже (например английский линукс или винда), введённые пользователем русские символы представляются в виде юникода и следователь уже в строке запроса получается несколько последовательностей %NN на один символ.

Вопрос заключается в следующем, как мне независимо от платформы (Windows, Linux, Mac) и версии браузера (русская, английская, ...) переконвертировать строку в кодировку Windows-1251, и если там присутствуют символы которых нет в кодировке 1251, то заменить их например на знак вопроса ?

Вот что используется сейчас (и естественно работает, только на русской винде)

Выделить код

Код:

gBrowser.loadURI( base_url + textbox.value );

XuTMAH
даже если ваша строка передастся в виде %NN, то php (или другой серверный язык) в любомслучае сначала приведёт его к нормальному виду, а потом уже возьёмтся за обработку.

Ну само собой приведёт, но он ожидает увидеть только кодировку Windows-1251 и следовательно каждая последовательность %NN приведётся к одной какой-то букве, а если ему передаётся юникодный символ, а у юникода 2 байта на букву, то одна буква передастся на сервер в виде %NN%MM, а сервер будет интерпретировать эту последовательность не как один символ, а как два, и в итоге получаются каракули...

Ну а вообще, как перевести из юникода в Windows-1251 ?

Ну а вообще, как перевести из юникода в Windows-1251 ?

Выделить код

Код:

var s = "строка";
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
		  createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "windows-1251";
var cs = suc. ConvertFromUnicode (s);
print (cs);

Спасибо! Всё получилось, всё работает!

А у меня проблемы с кириллицей Windows-1251. А точнее, отображается как западноевропейская ..search.php?q=Кириллица  -  Êèðèëëèöà. Как сие побороть?

Добавлено:

Проблема разрешилась, был конфликт с расширением Gmail Manager . Отключил его на .... потому как нефиг кириллицу в западноевропейскую конвертить.