|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] _INetExplorerCapable ($s_IEString). Обратное преобразование. |
|
[решено] _INetExplorerCapable ($s_IEString). Обратное преобразование.
|
Старожил Сообщения: 215 |
Профиль | Отправить PM | Цитировать
Есть строка - путь к файлу в интернете. В ней могут быть пробелы и другие символы, которые заменяются на %XX
Функция _INetExplorerCapable ($s_IEString) производит преобразование строки для совместимости с IE Нужна функция или алгоритм, производящая(й) обратное преобразование. Пробывал переписать по аналогии с _INetExplorerCapable($s_IEString). К сожалению, срабатывает только для строк, преобразованных АвтоИтом. http://ru.wikipedia.org/wiki/Википедия http://ru.wikipedia.org/wiki/%D0%92%...B4%D0%B8%D1%8F Такую строку обратно преобразовать у меня не получилось. |
|
Отправлено: 16:01, 21-04-2009 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать скорее всего в вики, русские буквы в адресе ни как не кодируются, а обробатываются на 404,
либо при загрузке скриптом. попробуйте напрямую работать с этим адресов - возможно все получтся. |
------- Отправлено: 02:32, 22-04-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Sylver Dragon:
$URL = "http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F" $sEncode_URL = _HexToURLString($URL) ConsoleWrite($sEncode_URL) Func _HexToURLString($sURLHex) Local $aURLHexSplit = StringSplit($sURLHex, "") Local $sRetString = "", $iDec, $iUbound = UBound($aURLHexSplit) For $i = 1 To $iUbound - 1 If $aURLHexSplit[$i] = "%" And $i + 2 <= $iUbound - 1 Then $i += 2 $iDec = Dec($aURLHexSplit[$i - 1] & $aURLHexSplit[$i]) If Not @error Then $sRetString &= Chr($iDec) Else $sRetString &= $aURLHexSplit[$i - 2] EndIf Else $sRetString &= $aURLHexSplit[$i] EndIf Next ;_UTF8ToANSI($sUTF8): Local $sUTF8 = $sRetString Local $iLen = StringLen($sUTF8) Local $stBuf = DllStructCreate("byte[" & $iLen * 2 & "];byte[2]") Local $aRet = DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _ "int", 65001, "int", 0, _ "str", $sUTF8, "int", -1, _ "ptr", DllStructGetPtr($stBuf), "int", $iLen * 2 + 2) Local $stOut = DllStructCreate("char[" & $iLen & "];char") $aRet = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _ "int", 0, "int", 0, _ "ptr", DllStructGetPtr($stBuf), "int", -1, _ "ptr", DllStructGetPtr($stOut), "int", $iLen + 1, _ "int", 0, "int", 0) Return DllStructGetData($stOut, 1) EndFunc |
|
------- Отправлено: 03:29, 22-04-2009 | #3 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать еще вариант (штатными средствами):
$s_IEString = "http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%9F%D1%80%D0%B5%D1%81%D1%81-%D1%80%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B" ConsoleWrite(_INetExplorerCapableUndo($s_IEString) &@CRLF) Func _INetExplorerCapableUndo($s_IEString) Local $a_IEChar = StringRegExp($s_IEString, "%[[:xdigit:]]{2}", 3) If IsArray($a_IEChar) Then For $i=0 To UBound($a_IEChar)-1 $s_IEString = StringReplace($s_IEString, $a_IEChar[$i], Chr(Dec(StringTrimLeft($a_IEChar[$i],1)))) Next $s_IEString = BinaryToString(StringToBinary($s_IEString, 4), 4) EndIf Return $s_IEString EndFunc |
Последний раз редактировалось amel27, 22-04-2009 в 06:38. Причина: оптимизация Отправлено: 05:41, 22-04-2009 | #4 |
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Спасибо большое.
Первый вариант работает. А второй - так же, как у меня. Строки, преобразованные через AutoIt он может обработать, а то, что нужно - нет: http://ru.wikipedia.org/wiki/Википедия |
|
Отправлено: 07:53, 22-04-2009 | #5 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Sylver Dragon:
$s_IEString = "http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%9F%D1%80%D0%B5%D1%81%D1%81-%D1%80%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B" MsgBox(0,"",_INetExplorerCapableUndo($s_IEString)) Func _INetExplorerCapableUndo($s_IEString) Local $a_IEChar = StringRegExp($s_IEString, "%[[:xdigit:]]{2}", 3) If IsArray($a_IEChar) Then For $i=0 To UBound($a_IEChar)-1 $s_IEString = StringReplace($s_IEString, $a_IEChar[$i], Chr(Dec(StringTrimLeft($a_IEChar[$i],1)))) Next $s_IEString = BinaryToString(StringToBinary($s_IEString), 4) EndIf Return $s_IEString EndFunc |
|
Отправлено: 08:20, 22-04-2009 | #6 |
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Всё. Теперь всё работает
Спасибо всем |
------- Отправлено: 08:24, 22-04-2009 | #7 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата amel27:
Цитата amel27:
Upd: Получается что да: $sANSI_String = "Тест" $sUTF8_String = _StringANSIToUTF8($sANSI_String) $sANSI_String = _StringUTF8ToANSI($sUTF8_String) ConsoleWrite("UTF-8: " & $sUTF8_String & @CRLF) ConsoleWrite("ANSI: " & $sANSI_String & @CRLF) Func _StringANSIToUTF8($sString) Return BinaryToString(StringToBinary($sString, 4)) EndFunc Func _StringUTF8ToANSI($sString) Return BinaryToString(StringToBinary($sString), 4) EndFunc |
||
------- Отправлено: 15:14, 22-04-2009 | #8 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
Цитата Creat0R:
|
||
Последний раз редактировалось amel27, 23-04-2009 в 02:56. Отправлено: 02:41, 23-04-2009 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
V. 5.5/2000/2003 - [решено] Обратное разрешение ip адреса сервера-отправителя | migunov | Microsoft Exchange Server | 1 | 22-01-2010 10:37 | |
MSFT SQL Server - [решено] Преобразование скрипта для Oracle в скрипт для SQL | EvgeniyQQQ | Программирование и базы данных | 3 | 25-03-2009 01:26 | |
Доступ - общий доступ - "обратное" наследование | Busla | Microsoft Windows Vista | 1 | 07-09-2008 21:01 | |
[решено] XLT преобразование как метод разделения программы и дизайна! | Vlad Drakula | Вебмастеру | 2 | 22-06-2006 21:22 | |
Преобразование писем из ОЕ | badze | Хочу все знать | 2 | 16-09-2005 08:02 |
|