powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
11 сообщений из 11, страница 1 из 1
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37566525
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то, наверное просто не хватает знаний. Нагуглить тоже сходу не удалось.

В общем стандартным кодом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim XM As New MSXML2.XMLHTTP60
XM.Open "GET", "мой урл"
XM.send
Do While XM.ReadyState <> 4
  DoEvents
  If Abort Then XM.Abort: Goto Ab
Loop
t = XM.ResponseText


пытаюсь получить с сайта обычный текстовый файл в виндовой кодировке. Браузером я его спокойно получаю. Тут же на последней строке получаю ошибку:
"Достигнут конец файла при недопустимом состоянии текущей кодировки."

что удается нагуглить обычно касается работы с этим компонентом из html и рекомендации сводятся к тому, чтобы задать правильную кодировку.

пробовал перед send вставить строку
Код: vbnet
1.
XM.setRequestHeader "Content-Type", "text/plain; charset=windows-1251"


не помогло.
...
Рейтинг: 0 / 0
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37566536
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proпытаюсь получить с сайта обычный текстовый файл в виндовой кодировке. Браузером я его спокойно получаю. Тут же на последней строке получаю ошибку:
"Достигнут конец файла при недопустимом состоянии текущей кодировки."А что сервер в реальности посылает? Скорее всего там несовпадение заявленой кодировки с реальной. MSXML намного более жесток к ошибкам чем браузеры.

Shocker.Proпробовал перед send вставить строку
Код: vbnet
1.
XM.setRequestHeader "Content-Type", "text/plain; charset=windows-1251"


не помогло.И не поможет. Это заголовок для посылки а не для запроса. В запросе надо посылать Accept-Charset заголовок.
Код: vbnet
1.
XM.setRequestHeader "Accept-Charset", "windows-1251"
...
Рейтинг: 0 / 0
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37566593
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без указания кодировки можно попробовать сначала загнать в байтовый массив, а затем в текстовую переменную:
Код: vbnet
1.
2.
3.
4.
Dim b() As Byte, t As String
...
b() = .responseBody
t = b()
...
Рейтинг: 0 / 0
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37566923
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlА что сервер в реальности посылает? Скорее всего там несовпадение заявленой кодировки с реальной. MSXML намного более жесток к ошибкам чем браузеры.Я ж говорю, знаний не хватило.... что там еще заголовок передается в ответе сервера, а не в самом файле. Пообщался сейчас с программером, который возвращает мне этот файл - он прописал кодировку windows-1251 в ответе.

Но теперь другая ошибка - "Указанная кодировка не поддерживается."

XM.setRequestHeader "Accept-Charset", "windows-1251"
не помогает.

ZVIБез указания кодировки можно попробовать сначала загнать в байтовый массив, а затем в текстовую переменную:получаю знаки вопроса на выходе
...
Рейтинг: 0 / 0
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37566940
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНо теперь другая ошибка - "Указанная кодировка не поддерживается."разобрались
он отправлял "cp1251"
поставили "windows-1251" - все заработало

всем спасибо
...
Рейтинг: 0 / 0
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37566951
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proполучаю знаки вопроса на выходе
Тогда: t = StrConv(b, vbUnicode)
...
Рейтинг: 0 / 0
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37567337
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVIShocker.Proполучаю знаки вопроса на выходе
Тогда: t = StrConv(b, vbUnicode) и этот вариант работает, спасибо
...
Рейтинг: 0 / 0
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37568146
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProXM.setRequestHeader "Accept-Charset", "windows-1251"
не помогает.Это должно помогать если сервер может выдавать ответ в нескольких кодировках и/или умеет самостоятельно конвертировать.

Если кратко, то принцип такой:
Клиент посылает POST запрос с установленным Accept-Charset. Сервер может эту команду вообще проигнорировать, либо принять к сведению. Если игнорирует - то ничего не делает. Если не игнорирует то прочитав с диска html и увидав в ней команду meta Content-Type, берет оттуда указаную кодировку и перед отправкой файла клиенту делает перекодировку текста на лету и отсылает клиенту файл с уже поправленным meta.
Но кроме тэга в html есть еще и Content-Type в http заголовке, который есть всегда (должен быть всегда) и а вот meta тэг может отсутствовать...
В итоге, из-за того что кодировка может быть указана в двух местах (в http заголовке и html заголовке) плюс реальный текст может быть в третей кодировке - проблем может быть море.
...
Рейтинг: 0 / 0
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37568176
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

ясно, спасибо
...
Рейтинг: 0 / 0
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37568216
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, подскажите, у меня в своей тетрадочке есть примеры на эту тему, только там указано Set oHttp = CreateObject("MSXML2.XMLHTTP"), а у Вас еще и "60", что разница между этими объектами?
...
Рейтинг: 0 / 0
MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
    #37568519
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
версия посвежее

кстати, MSXML2.XMLHTTP выдавал в той же ситуации "System error" с длинным кодом ошибки
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MSXML2 - Достигнут конец файла при недопустимом состоянии текущей кодировки.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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