1

Тема: VBS: responseText возвращает кривой текст

Доброе время суток!
Два дня бьюсь, не могу решить проблему!
Post запрос возвращает XML строку в которой русские символы нечитаемые!
Помогите кто чем может!!!

Пример скрипта:

Set HTTP = CreateObject("Msxml2.ServerXMLHTTP.5.0")
HTTP.setProxy 2, "10.10.10.3:8080"
xmlString = "<XXXXXXXXXXXXXXXXXXXXXXXXXXXXXx</XML>"
HTTP.Open "POST", "http://XXXXXXXXXXXX:8080/XXXXXXX/"
HTTP.Send(xmlString)
MsgBox (HTTP.responseText)

2 (изменено: Евген, 2011-04-08 15:52:19)

Re: VBS: responseText возвращает кривой текст

Если сервер ASP, то сделай следующее...

<% Response.Charset= "win-1251" %>

ну или какую надо кодировку...

Времени не хватает... :-(

3 (изменено: Rumata, 2011-04-08 16:53:53)

Re: VBS: responseText возвращает кривой текст

Точнее будет так:

Content-Type: text/html; charset=<...>
Content-Type: application/xml; charset=<...>

Укажите правильное название кодировки вместо <...>

( 2 * b ) || ! ( 2 * b )

4

Re: VBS: responseText возвращает кривой текст

А есть решение на клиентской стороне ?

Времени не хватает... :-(

5

Re: VBS: responseText возвращает кривой текст

Конвертировать посредством «ADODB.Stream» из UTF-8, если я правильно понял о чём речь.

6 (изменено: mikser, 2011-04-08 21:16:03)

Re: VBS: responseText возвращает кривой текст

evgennet
Определите тип кодировки.
Вот тут в конце есть образцы крякозябр.
Потом можете  написать свои функции перекодировки. Ну или возьмите мою:


var ANSI = ("№|&bull;|" +
"А|Б|В|Г|Д|Е|Ё|Ж|З|И|Й|" + 
"К|Л|М|Н|О|П|Р|С|Т|У|Ф|" + 
"Х|Ц|Ч|Ш|Щ|Ъ|Ы|Ь|Э|Ю|Я|" + 
"а|б|в|г|д|е|ё|ж|з|и|й|" + 
"к|л|м|н|о|п|р|с|т|у|ф|" + 
"х|ц|ч|ш|щ|ъ|ы|ь|э|ю|я").split("|");


var W1251 = ("№|—|" + 
"Рђ|Р‘|Р’|Р“|Р”|Р•|РЃ|Р–|Р—|Р&#65533;|Р™|" + 
"Рљ|Р›|Рњ|Рќ|Рћ|Рџ|Р |РЎ|Рў|РЈ|Р¤|" + 
"РҐ|Р¦|Р§|РЁ|Р©|РЄ|Р«|Р¬|Р­|Р®|РЇ|" + 
"Р°|Р±|РІ|Рі|Рґ|Рµ|С‘|Р¶|Р·|Рё|Р№|" + 
"Рє|Р»|Рј|РЅ|Рѕ|Рї|СЂ|СЃ|С‚|Сѓ|С„|" + 
"С…|С†|С‡|С?|С‰|СЉ|С‹|СЊ|СЌ|СЋ|СЏ").split('|');
var hW1251 ={}; //хешь декодировки
for (var i in W1251)
hW1251[W1251[i]] = ANSI[i];

var reW1251 = new RegExp("(" + W1251.join('|') + ")", 'g')


function win1251_decode(s)
{
        return s.replace(reW1251, function (p)
        {
                return hW1251[p] ? hW1251[p] : p
        })
} //func

Функция win1251_decode - преобразует utf8 строку  в читаемую.

PS Движок форума неправильно преобразовал некоторые символы строки скрипта в HTML сущности...

Еще можно попробовать заставить браузер это делать.
Код для HTA.

//псевдо код :) Не уверен что все правильно тут
function decode()
{
var subBrowser= document.createElement("IFRAME")
subBrowser.window.document.write('<meta http-equiv="Content-Type" content="text/html; charset='+Правильная_кодировка+'" />')
subBrowser.window.document.write(Ваш_текст_в_неправильной_кодировке)
subBrowser.window.document.close()

return subBrowser.window.document.body.innerText
}

7

Re: VBS: responseText возвращает кривой текст

Всем спасибо!
Помогло следующие решение следующего вида:

Set HTTP = CreateObject("Msxml2.ServerXMLHTTP.5.0")
HTTP.setProxy 2, "10.10.10.3:8080"
xmlString = "<XXXXXXXXXXXXXXXXXXXXXXXXXXXXXx</XML>"
HTTP.Open "POST", "http://XXXXXXXXXXXX:8080/XXXXXXX/"
HTTP.Send(xmlString)
OTVET = HTTP.responseBody
set VStream = WScript.CreateObject("ADODB.Stream")
VStream.Type = 1
VStream.Open
VStream.Write OTVET
VStream.Position = 0
VStream.Type = 2
VStream.Charset = "windows-1251"
OTVET = VStream.ReadText
MsgBox (OTVET)

8 (изменено: mikser, 2011-04-11 16:20:46)

Re: VBS: responseText возвращает кривой текст

А казалось бы а причем тут DB.

9

Re: VBS: responseText возвращает кривой текст

OFF: Ура повторному открытию Америки и изобретению велосипеда !

Господа, пользуйтесь коллекцией. The gray Cardinal и другие участники форума не зря её делали.
http://forum.script-coding.com/viewtopic.php?id=997

Рекомендую начинать поиски решений именно с неё. Многое уже давно было решено и открыто.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

10

Re: VBS: responseText возвращает кривой текст

А ADOdb разве во всех виндах есть?

11

Re: VBS: responseText возвращает кривой текст

2 mikser: "Во всех" это слишком неопределённое понятие. Начиная с Windows 95 присутствует (на сколько мне удалось выяснить). Или вас интересует Windows 3.X / Windows CE / Windows Mobile ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

12 (изменено: mikser, 2011-04-13 12:05:25)

Re: VBS: responseText возвращает кривой текст

Если так то хорошо, десктоптных вполне достаточно.