Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Firefox UDF и кодировка (http://forum.oszone.net/showthread.php?t=141926)

malev 05-06-2009 09:39 1135554

Firefox UDF и кодировка
 
Уважаемые гуру, подскажите если кто работал с FF.au3 (UDF для Firefox) возможно ли через плагин получить русское название ссылки. Возможно дело и не в плагине, но сам я по английски не общаюсь у автора плагина спросить не могу. Вот примерный текст:
Код:

#include <FF.au3>
#include <Array.au3>
_FFStart("http://ya.ru/")
 _FFConnect()
If _FFIsConnected() Then
        $arr=_FFLinksGetAll()
        _ArrayDisplay($arr)
EndIf

Получается нечитаемые символы вместо русских ссылок, с английскими все нормально вроде. Для FF.au3 еще надо поставить и запустить MozRepl аддон к firefox, я так понял это типа посредник. Вариант через IE пока не нужен. Спасибо.

Medic84 06-06-2009 19:02 1136812

Цитата:

Цитата malev
Уважаемые гуру, подскажите если кто работал с FF.au3 (UDF для Firefox) возможно ли через плагин получить русское название ссылки. Возможно дело и не в плагине, но сам я по английски не общаюсь у автора плагина спросить не могу. Вот примерный текст:
Код:
#include <FF.au3>
#include <Array.au3>
_FFStart("http://ya.ru/")
_FFConnect()
If _FFIsConnected() Then
$arr=_FFLinksGetAll()
_ArrayDisplay($arr)
EndIf
Получается нечитаемые символы вместо русских ссылок, с английскими все нормально вроде. Для FF.au3 еще надо поставить и запустить MozRepl аддон к firefox, я так понял это типа посредник. Вариант через IE пока не нужен. Спасибо. »

Это особенность интернета. Русских ссылок не существует. Просто сами браузеры кодируют символы типа %A2%A3 в русский язык и наоборот. Соответственно в программу нужно вставить какой либо перекодировщик.

malev 07-06-2009 16:51 1137480

не совсем согласен, во первых кодирование идет в другом формате у меня, похоже на utf-8 и пробовал другим методом там ссылки нормально, через Com объект вроде.

malev 09-06-2009 11:54 1139044

Подскажите простой способ перекодировки строки, неужели нет встроенной функции в AutoIt, мне нужно получить тест на русском соответственно интересуют кодировки cp-1251 и UTF

Gorrr 10-06-2009 05:03 1139722

Попробуй что-то типа:
Код:

$decodedstring = BinaryToString(StringToBinary($string), 4)
Ну, в общем, какая-то комбинация функций BinaryToString и StringToBinary с параметрами.

Iska 10-06-2009 08:20 1139763

Боюсь, это не поможет. Как правильно заметил Medic84, дело не столько в кодировке. Скорее всего требуется такое (как описано в #11):
Код:

AutoItSetOption("MustDeclareVars", 1)

; http://ru.wikipedia.org/wiki/Юникод
Local $strTextUTF8        = "http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4"
Local $objMSScriptControl = ObjCreate("MSScriptControl.ScriptControl")

With $objMSScriptControl
        .Language = "JScript"
       
        MsgBox(1, "URI->ANSI", .eval("decodeURI('" & $strTextUTF8 & "');"))
EndWith

$objMSScriptControl = 0

Exit 0


Gorrr 10-06-2009 10:28 1139852

Ну, или вот типа так:
Код:

$string = "%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4" ; Юникод
MsgBox(0, "", BinaryToString(Binary("0x" & StringRegExpReplace($string, "%", "")), 4))


malev 11-06-2009 20:45 1141230

Вот по такому коду, отправить запрос поиска через яндекс



Такие пироги, в какой кодировке выделенный текст, подскажите.



Воможно я неправильно обяснил но мне нужен не здесь русский текст



а в описании ссылки например Яндекс, т.е. слово "Яндекс"
ну или здесь

Medic84 11-06-2009 21:32 1141259

Код:

$zap2 = String("Пиво")
Попробуй так

Medic84 11-06-2009 21:52 1141271

Можно полный код программы? Я посмотрю что можно сделать, да и не только я.

malev 15-06-2009 23:22 1144232

Medic84, допустим это и есть полный код программы:
Код:

#include <FF.au3>
_FFStart("ya.ru","default",2)
$Socket = _FFConnect()
$zap2=String("Пиво")
If _FFIsConnected() Then
        _FFCmd(".forms[0].elements[0].value='" & $zap2 & "'")
        _FFFormSubmit(0)
EndIf

Это простейший образец проблем с кодировкой, что должен делать запускает firefox на страницу ya.ru если соединение удалось отправляем поисковый запрос. UDF FF.au3 скачивается по ссылке в первом сообщении. String() не помогает.

Gorrr 16-06-2009 04:47 1144381

У меня корректно отрабатывает только так:
Код:

$zap2 = "Пиво"
__FFValue2JavaScript($zap2)

Правда, если необходимо получить русский заголовок окна FireFox, то MozRepl все равно возвращает его криво, похоже, теряя какие-то значимые биты кодировки.

malev 18-06-2009 09:13 1145721

Здорово, работает, спасибо Gorrr, остался еще один нерешенный вопрос:
Код:

#include <FF.au3>
#include <Array.au3>
_FFStart("ya.ru","default",2)
$Socket = _FFConnect()
If _FFIsConnected() Then
        $arr=_FFLinksGetAll()
        _ArrayDisplay($arr)
EndIf

_FFLinksGetAll() тоже возвращает нечитаемые русские символы, как здесь быть.
И какое твое мнение где ошибка в MozRepl или UDF, еще если сможешь кратко опиши что делает функция __FFValue2JavaScript () она ведь #INTERNAL_USE_ONLY# и описания нет как такового.

Gorrr 18-06-2009 12:38 1145864

Функция __FFValue2JavaScript () переводит текст в эскейп-последовательность юникод. Что это такое, смотри, например, здесь или здесь.

Подозреваю, что проблема с русскими буквами именно в MozRepl, который возвращает по одному байту каждого символа, вместо двух (т.е. типа как ASCII вместо Unicode). Поэтому с латиницей проблем нет, а русские буквы возвращаются кракозябрами.
Вообще, я не знаток джаваскрипта, и имею об этом смутное представление. Но у MozRepl, вроде, открытые исходники, так что, может быть, кто-то более разбирающийся даст свою экспертную оценку или предложит выход.


Время: 11:48.

Время: 11:48.
© OSzone.net 2001-