PDA

Показать полную графическую версию : Firefox UDF и кодировка


malev
05-06-2009, 09:39
Уважаемые гуру, подскажите если кто работал с FF.au3 (UDF для Firefox) (http://www.autoitscript.com/forum/index.php?showtopic=95595) возможно ли через плагин получить русское название ссылки. Возможно дело и не в плагине, но сам я по английски не общаюсь у автора плагина спросить не могу. Вот примерный текст:
#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
Уважаемые гуру, подскажите если кто работал с 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
не совсем согласен, во первых кодирование идет в другом формате у меня, похоже на utf-8 и пробовал другим методом там ссылки нормально, через Com объект вроде.

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

Gorrr
10-06-2009, 05:03
Попробуй что-то типа:
$decodedstring = BinaryToString(StringToBinary($string), 4)
Ну, в общем, какая-то комбинация функций BinaryToString и StringToBinary с параметрами.

Iska
10-06-2009, 08:20
Боюсь, это не поможет. Как правильно заметил Medic84, дело не столько в кодировке. Скорее всего требуется такое (как описано в #11 (http://www.autoitscript.com/forum/index.php?showtopic=42924&view=findpost&p=319768)):
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
Ну, или вот типа так:

$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
Вот по такому коду, отправить запрос поиска через яндекс

http://fincapital.ucoz.ru/image/1.png

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

http://fincapital.ucoz.ru/image/2.png

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

http://fincapital.ucoz.ru/image/3.png

а в описании ссылки например Яндекс (http://ya.ru), т.е. слово "Яндекс"
ну или здесь http://fincapital.ucoz.ru/image/4.png

Medic84
11-06-2009, 21:32
$zap2 = String("Пиво")

Попробуй так

Medic84
11-06-2009, 21:52
Можно полный код программы? Я посмотрю что можно сделать, да и не только я.

malev
15-06-2009, 23:22
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
У меня корректно отрабатывает только так:

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

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

malev
18-06-2009, 09:13
Здорово, работает, спасибо 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
Функция __FFValue2JavaScript () переводит текст в эскейп-последовательность юникод. Что это такое, смотри, например, здесь (http://experiment.net.ru/js2/?f=ident.htm#1009576) или здесь (http://0xcc.net/jsescape/).

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




© OSzone.net 2001-2012