Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MSXML и отсутствие в ответе сервера строки encoding="windows-1251" / 5 сообщений из 5, страница 1 из 1
21.06.2005, 16:59:11
    #33127302
Russland
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSXML и отсутствие в ответе сервера строки encoding="windows-1251"
Добрый день!
Пишу клиента для обмена через XML на VB и MSXML.
Сервер принадлежит другой организации.
Сервер отвечает XML пакетами в кодировке "windows-1251".
Отсылаю запрос. Получаю ответ.
Сохраняю XMLHTTP40.responseXML - пусто.
Сохраняю XMLHTTP40.responseBody - есть инфа, только в начале какие то лишние символы.
Сохраняю XMLHTTP40.responseText - есть инфа, но вместо русских символов вопросы.
Есть подозрение на отсутствие в заголовке ответа с сервера <?xml version="1.0" ?> строки encoding="windows-1251", вернее неподозрение а уверенность.
Хотелось бы все таки использовать LHTTP40.responseXML. Кто знает как победить, поделитесь опытом плз...
...
Рейтинг: 0 / 0
21.06.2005, 17:22:29
    #33127376
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSXML и отсутствие в ответе сервера строки encoding="windows-1251"
попросить, чтобы на другой стороне кодировку явно указывали.
а еще можно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        Dim f As Integer
        Dim stm As ADODB.Stream
        
 300          Set stm = New ADODB.Stream
 310          stm.Open
 320          stm.Charset = "Windows-1251"
 330          stm.Type = adTypeBinary
 340          stm.Write objSrvHTTP.responseBody
 350          stm.Position =  0 
        
 360          stmp = modFiles.FileTempCreate
 370          stm.SaveToFile stmp, adSaveCreateOverWrite
        
 380          f = FreeFile
 390          Open stmp For Input Access Read Lock Read Write As f
 400          s = input$(LOF(f), f)
 410          Close #f
        
 420          ResponseMsg = s
...
Рейтинг: 0 / 0
22.06.2005, 08:50:48
    #33128039
Russland
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSXML и отсутствие в ответе сервера строки encoding="windows-1251"
To: Konst_One

1. просил...
2. насколько я понял - это один из методов сохранения responceBody, а хотелось бы использовать responceXML, чтобы в дальнейшем обрабатывать DOMDocument40

но все равно спасибо, буду ковырять :-)
...
Рейтинг: 0 / 0
22.06.2005, 12:28:01
    #33128587
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSXML и отсутствие в ответе сервера строки encoding="windows-1251"
а там и будет твой XML уже в нужном виде, а это продолжение, как обарабатывать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
 450      If GetHTTPStatus(objSrvHTTP.Status) = httpOK Then
 451          s = VBA.Trim$(s)
 454          i = CLng(VBA.InStr( 1 , s, "<?xml"))
            If i =  0  Then i =  1 
 452          s = VBA.Mid$(s, i)
 453          s = VBA.Trim$(s)
            If VBA.InStr( 1 , s, "<error>") Or VBA.InStr( 1 , s, "<locked>") Then
                'ñèñòåìíûå îøèáêè
                
            Else
 460          fINI = App.Path & "\gate.ini"
 470          mINI.INIPath = fINI
 480          bEncode = CBool(Val("" & mINI.GetVal("Params", "UseEncoding")))
 490          Encoding = mINI.GetVal("Params", "Encoding")
 500          If bEncode Then
 530              j = CLng( 0  & VBA.InStr( 1 , s, ">"))
 540              s2 = VBA.Mid(s, j +  1 )
 550              s = "<?xml version=""1.0"" encoding=""" & Encoding & """ ?>" & s2
            End If
 560          DTD = VBA.Trim$("" & mINI.GetVal("Params", "DTD"))
 570          If Len(DTD) >  0  Then
 580              i = VBA.InStr( 1 , s, "<!")
                If i >  0  Then
 590                  s1 = VBA.Mid(s,  1 , i -  1 )
 600                  j = VBA.InStr(i +  1 , s, ">", vbTextCompare)
 610                  s2 = VBA.Mid(s, j +  1 )
 620                  s = s1 & "<!DOCTYPE package SYSTEM """ & DTD & """>" & s2
                Else
 601                  j = VBA.InStr( 2 , s, ">", vbTextCompare)
 602                  s1 = VBA.Left(s, j)
 603                  s2 = VBA.Mid(s, j +  1 )
 604                  s = s1 & "<!DOCTYPE package SYSTEM """ & DTD & """>" & s2
                End If
            End If
            End If
 630          DOMDocCreateObject = CBool(Val("" & mINI.GetVal("Params", "DOMDocCreateObject")))
 640          If DOMDocCreateObject Then
 650              Set objXMLReceive = VBA.CreateObject("MSXML2.DOMDocument")
            Else
 660              Set objXMLReceive = New MSXML2.DOMDocument
            End If
 670          objXMLReceive.async = False
 680          b = objXMLReceive.loadXML(s)
 690          objXMLReceive.setProperty "SelectionLanguage", "XPath"
...
Рейтинг: 0 / 0
22.06.2005, 13:34:58
    #33128789
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSXML и отсутствие в ответе сервера строки encoding="windows-1251"
автор2. насколько я понял - это один из методов сохранения responceBody, а хотелось бы использовать responceXML, чтобы в дальнейшем обрабатывать DOMDocument40

Код: plaintext
objXML.loadXML StrConv(objSrvHTTP.responseBody, vbUnicode)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MSXML и отсутствие в ответе сервера строки encoding="windows-1251" / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]