Что нового

декодировать текст

andreitrane

Новичок
Сообщения
141
Репутация
3
дайте функцию и include для декодирования вот этого РљРёСЂРїРёС‡

вроде из CP1251 в UTF-8
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Re: декодер

andreitrane
Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Как правильно называть темы

"декодер" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, Администратор форума.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
Sky-WaLkeR, эти инклуды у меня есть))) можете подсказать какой именно мне нужен и какая функция
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
andreitrane
Код:
#include <Encoding.au3>

MsgBox(64, 'Info', _Encoding_CyrillicTo1251('РљРёСЂРїРёС‡'))
Encoding.au3.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
madmasles, я этот способ пробовал
да, в msgboxe он декодирует, но если сделать в IE, то фигню какую то выдает
???N?????N?
если сделать так
Код:
$Response = FileRead("D:\Рабочий стол\123.txt")
$rtext = BinaryToString($Response)
 StringRegExpReplace($rtext, '(?s).*?<name>(.*?)</name>?.*', '\1')
			if Not $sname Then
			Else
				GUICtrlSetData($logboss, _Encoding_CyrillicTo1251($sname))
			EndIf

то декодирует, но если же сделать так
Код:
$Response = $oHTTP.ResponseText
$rtext = BinaryToString($Response)
            $sname = StringRegExpReplace($rtext, '(?s).*?<name>(.*?)</name>?.*', '\1')
			if Not $sname Then
			Else
				GUICtrlSetData($logboss, _Encoding_CyrillicTo1251($sname))
			EndIf

то выдает ???N?????N?




полный код отправки
Код:
$iserv = $server[1]
	$URL = "http://"& $iserv &"/prison/universal.php?getBoss"
            $PostData = "user="& GUICtrlRead($IDinput) &"&key="& GUICtrlRead($Authinput) &"&method=getBoss"
            $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
            $oHTTP.Open("POST", $URL)
            $oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
            Execute('$oHTTP.Send($PostData)')
            $oHTTP.WaitForResponse
            Global $Response = $oHTTP.ResponseText
			;$Response = FileRead("D:\Рабочий стол\123.txt")
			$rerr = $oIEErrorHandler
			Global $rtext = BinaryToString($Response)
            $sname = StringRegExpReplace($rtext, '(?s).*?<name>(.*?)</name>?.*', '\1')
			if Not $sname Then
			Else
				GUICtrlSetData($logboss, _Encoding_CyrillicTo1251($sname))
			EndIf
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
потому что я дал код отправки, а не код программы :whistle:
в дополнение к тому
Код:
$server = stringsplit("188.93.20.139,109.234.155.196,109.234.155.197,109.234.155.198,109.234.156.250,109.234.156.251,109.234.156.253,109.234.156.252", ",")

Код:
Global $oIEErrorHandler = ObjEvent("AutoIt.Error","ComErrFunc")

Код:
Func ComErrFunc() 
         If IsObj($oIEErrorHandler) Then
         $HexNumber = Hex($oIEErrorHandler.number, 8)
         if $HexNumber=00000000 then Return 0
         SetError($HexNumber)
         Return 1
		 EndIf
		 Return 0
EndFunc


код отправки работает, смотрел через чарли, исходящие верны и входящие отлично идут с полной инфой
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
часть входящего пакета
Код:
<?xml version="1.0" encoding="UTF-8"?>

<data>
    <level>4</level>
    <screen>battle</screen>
    <currentDamage>20</currentDamage>
    <boss>
        <id>1</id>
        <name>РљРёСЂРїРёС‡</name>
        <bigboss>false</bigboss>
        <h_full>1000</h_full>
        <h_now>940</h_now>
        <battle_time>8936</battle_time>
        <!-- no data in 'cur_damage' -->
        <rewards>
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
странно, в чарлик приходит(и должно приходить) так РљРёСЂРїРёС‡, а в сам скрипт приходит в таком виде КирпиÑ
поэтому _Encoding_CyrillicTo1251 не декодирует‡
как это исправить и что вообще можно сделать?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
andreitrane [?]
код отправки работает
У меня нет. Как ты хочешь чтобы тебе помогли, если нет возможности воспроизвести твою проблему?
Заготовь рабочий тестовый скрипт, чтобы я смог получить то что получаешь ты, и соответственно попытаться разобраться.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
У меня нет. Как ты хочешь чтобы тебе помогли, если нет возможности воспроизвести твою проблему?
Заготовь рабочий тестовый скрипт, чтобы я смог получить то что получаешь ты, и соответственно попытаться разобраться.
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Encoding.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 361, 572, 232, 142)
$Button1 = GUICtrlCreateButton("Button1", 8, 8, 57, 17)
$Edit1 = GUICtrlCreateEdit("", 8, 112, 345, 457)
$Edit2 = GUICtrlCreateEdit("", 0, 24, 353, 81)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Button1
			$URL = "http://188.93.20.139/prison/universal.php?getBoss"
            $PostData = "user=100916829&key=50cf4eaef16f57868ad7eabe67f0773f&method=getBoss"
            $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
            $oHTTP.Open("POST", $URL)
			$oHTTP.setTimeouts(5000, 5000, 10000, 10000, 50000, 50000, 100000, 100000)
            $oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
            $oHTTP.Send($PostData)
            $oHTTP.WaitForResponse
            Global $Response = $oHTTP.ResponseText
			;$Response = FileRead("D:\Рабочий стол\123.txt")
			Global $rtext = BinaryToString($Response)
            $sname = StringRegExpReplace($rtext, '(?s).*?<name>(.*?)</name>?.*', '\1')
			if Not $sname Then
			Else
				GUICtrlSetData($Edit1, $Response)
				GUICtrlSetData($Edit2, _Encoding_CyrillicTo1251($sname))
			EndIf

	EndSwitch
WEnd


Тогда используй _Encoding_ISO88591To1251

судя по всему у меня encoding.au3 слишком старое, потому что эта функция у меня вызывает ошибку uncnown function name
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
andreitrane
обновится не пробовал? :smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
andreitrane
если ты копипастишь с поста CreatoR то там ошибка. затесалась лишняя единица. правильное название функции - _Encoding_ISO8859To1251. но на будущее совет - просто открой библиотеку и бегло пройдись по функциям. почерпнешь много нового, заодно синтаксис увидишь.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
andreitrane
если ты копипастишь с поста CreatoR то там ошибка. затесалась лишняя единица. правильное название функции - _Encoding_ISO8859To1251. но на будущее совет - просто открой библиотеку и бегло пройдись по функциям. почерпнешь много нового, заодно синтаксис увидишь.

так я все функции в инклуде перепробовал, всеравно не выходит, и с этой тоже выдает ????N?????N?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
andreitrane
Вам нужно разобрать XML документ? Тогда зачем вся эта канитель?
Всё уже давно придумано. Используйте Msxml2.DOMDocument.3.0
Код:
Dim $URL="http://188.93.20.139/prison/universal.php?getBoss&user=100916829&key=50cf4eaef16f57868ad7eabe67f0773f&method=getBoss"

$oXMLDoc = ObjCreate("Msxml2.DOMDocument.3.0")
$oXMLDoc.async = false
$oXMLDoc.validateOnParse = false
$oXMLDoc.Load($URL)
ConsoleWrite($oXMLDoc.xml)
$oXMLDoc.setProperty("SelectionLanguage", "XPath")
$oListNodes = $oXMLDoc.selectNodes("//data/boss/name")

For $oNode In $oListNodes
    MsgBox(0,"", $oNode.Text)
Next
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
OffTopic:
Garrett
А ларчик просто открывался... ;D
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Kaster [?]
если ты копипастишь с поста CreatoR то там ошибка. затесалась лишняя единица
Там ошибки нету, просто это две разные функций, а библиотеку я забыл обновить :blum:.

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Encoding.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 361, 572, 232, 142)
$Button1 = GUICtrlCreateButton("Button1", 8, 8, 57, 17)
$Edit1 = GUICtrlCreateEdit("", 8, 112, 345, 457)
$Edit2 = GUICtrlCreateEdit("", 0, 24, 353, 81)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $Button1
            $URL = "http://188.93.20.139/prison/universal.php?getBoss"
            $PostData = "user=100916829&key=50cf4eaef16f57868ad7eabe67f0773f&method=getBoss"
            $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
            $oHTTP.Open("POST", $URL)
            $oHTTP.setTimeouts(5000, 5000, 10000, 10000, 50000, 50000, 100000, 100000)
            $oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
            $oHTTP.Send($PostData)
            $oHTTP.WaitForResponse
            Global $Response = $oHTTP.ResponseText
            ;$Response = FileRead("D:\Рабочий стол\123.txt")
            ;Global $rtext = BinaryToString($Response)
            $sname = StringRegExpReplace($Response, '(?s).*?<name>(.*?)</name>?.*', '\1')
            
			If @extended And $sname Then
                GUICtrlSetData($Edit1, $Response)
                GUICtrlSetData($Edit2, _Encoding_ISO88591To1251($sname))
            EndIf
    EndSwitch
WEnd


P.S
Последняя версия библиотеки уже есть тут.
 
Верх