VBA - система не поддерживает указанную кодировку

Ошибка времени выполнения "--1072896658 (c00ce56e)": система не поддерживает указанную кодировку

Я пытаюсь получить данные о ценах с этого сайта: http://web.tmxmoney.com/pricehistory.php?qm_symbol=%5ETTUT. Я получаю сообщение об ошибке "Ошибка времени выполнения" --1072896658 (c00ce56e)': система не поддерживает указанную кодировку ".

Я использовал приведенный ниже код для извлечения данных HTML с большинства веб-сайтов. Это единственный, который дает мне эту ошибку. Я думаю, что возможно, что я получаю ошибку, потому что веб-сайт использует Javascript, но я не уверен. Это определенно связано с макетом "тегов" веб-страницы. Я могу использовать код из первого тега "Quote" ( http://web.tmxmoney.com/quote.php?qm_symbol=%5ETTUT), но не из других вкладок.

 Option Explicit

  Sub TEST_PULL()

    Dim Look_String As String
    Dim Web_HTML As String
    Dim HTTP_OBJ As New MSXML2.XMLHTTP60

    Dim xa As Long
    Dim xb As Long

    Select Case HTTP_OBJ.Status
       Case 0: Web_HTML = HTTP_OBJ.responseText
       Case 200: Web_HTML = HTTP_OBJ.responseText **'THE ERROR IS CAUSED HERE**
       Case Else: GoTo ERROR_LABEL:
    End Select

    Look_String = "quote-tabs-content"
    xa = IIf(IsNumeric(Look_String), Look_String, InStr(Web_HTML, Look_String))
    xb = IIf(xa + 32767 <= Len(Web_HTML), 32767, Len(Web_HTML) - xa + 1)
    Web_HTML = Mid(Web_HTML, xa, xb)

  ERROR_LABEL:

  End Sub

Может кто-нибудь, пожалуйста, помогите мне разобраться

  1. Почему это происходит
  2. Как я могу успешно получить эти данные о ценах

Это было бы огромной помощью!!! Спасибо!!!

1 ответ

Решение

Это не ты, это они.

Заголовки ответа для страницы, которая вызывает ошибку, указывают кодировку, которая не существует: ISO-8559-1. ISO 8559 не имеет ничего общего с кодировкой текста - фактически он относится к размеру одежды. Это почти наверняка должно быть ISO-8859-1 вместо этого.

Окно инструментов разработчика Chrome, показывающее заголовки ответа с веб-страницы. Кодировка ISO-8559-1 обведена красным

Страница цитаты, которая успешно читается, имеет правильную кодировку ISO-8859-1.

Чтобы обойти эту проблему, используйте свойство responseBody, которое содержит необработанные байты перед декодированием. Затем функция StrConv может попытаться преобразовать эти байты в строку Unicode (хотя это может не дать правильных результатов во всех случаях), например так:

Case 200: Web_HTML = StrConv(HTTP_OBJ.responseBody, vbUnicode)

Другие вопросы по тегам