Показать полную графическую версию : Firefox UDF и кодировка
Уважаемые гуру, подскажите если кто работал с 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 пока не нужен. Спасибо.
Уважаемые гуру, подскажите если кто работал с 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 в русский язык и наоборот. Соответственно в программу нужно вставить какой либо перекодировщик.
не совсем согласен, во первых кодирование идет в другом формате у меня, похоже на utf-8 и пробовал другим методом там ссылки нормально, через Com объект вроде.
Подскажите простой способ перекодировки строки, неужели нет встроенной функции в AutoIt, мне нужно получить тест на русском соответственно интересуют кодировки cp-1251 и UTF
Попробуй что-то типа:
$decodedstring = BinaryToString(StringToBinary($string), 4)
Ну, в общем, какая-то комбинация функций BinaryToString и StringToBinary с параметрами.
Боюсь, это не поможет. Как правильно заметил 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
Ну, или вот типа так:
$string = "%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4" ; Юникод
MsgBox(0, "", BinaryToString(Binary("0x" & StringRegExpReplace($string, "%", "")), 4))
Вот по такому коду, отправить запрос поиска через яндекс
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
$zap2 = String("Пиво")
Попробуй так
Можно полный код программы? Я посмотрю что можно сделать, да и не только я.
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() не помогает.
У меня корректно отрабатывает только так:
$zap2 = "Пиво"
__FFValue2JavaScript($zap2)
Правда, если необходимо получить русский заголовок окна FireFox, то MozRepl все равно возвращает его криво, похоже, теряя какие-то значимые биты кодировки.
Здорово, работает, спасибо 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# и описания нет как такового.
Функция __FFValue2JavaScript () переводит текст в эскейп-последовательность юникод. Что это такое, смотри, например, здесь (http://experiment.net.ru/js2/?f=ident.htm#1009576) или здесь (http://0xcc.net/jsescape/).
Подозреваю, что проблема с русскими буквами именно в MozRepl, который возвращает по одному байту каждого символа, вместо двух (т.е. типа как ASCII вместо Unicode). Поэтому с латиницей проблем нет, а русские буквы возвращаются кракозябрами.
Вообще, я не знаток джаваскрипта, и имею об этом смутное представление. Но у MozRepl, вроде, открытые исходники, так что, может быть, кто-то более разбирающийся даст свою экспертную оценку или предложит выход.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.