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

Код: 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
MSXML и отсутствие в ответе сервера строки encoding="windows-1251"
    #33128039
Russland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To: Konst_One

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

но все равно спасибо, буду ковырять :-)
...
Рейтинг: 0 / 0
MSXML и отсутствие в ответе сервера строки encoding="windows-1251"
    #33128587
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а там и будет твой 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
MSXML и отсутствие в ответе сервера строки encoding="windows-1251"
    #33128789
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор2. насколько я понял - это один из методов сохранения responceBody, а хотелось бы использовать responceXML, чтобы в дальнейшем обрабатывать DOMDocument40

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


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