Символы Юникода в результате запроса xmlhttp - PullRequest
0 голосов
/ 02 ноября 2018

В этой ССЫЛКЕ >> @QHarr представил решение для подсчета результатов поиска Google и вот код

Public Sub GetResultsCount()
Dim sResponse As String, html As HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", "https://www.google.com/search?q=mitsubishi", False
    .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
    .send
    sResponse = StrConv(.responseBody, vbUnicode)
End With
Set html = New HTMLDocument
With html
    .body.innerHTML = sResponse
    Debug.Print .querySelector("#resultStats").innerText
End With

End Sub

Код работает без проблем .. но в ближайшем окне я получил это непонятные символы enter image description here

Как это исправить, чтобы они отображались арабскими символами?

Большое спасибо за помощь

1 Ответ

0 голосов
/ 02 ноября 2018

Я нашел эту тему: VBA - Преобразовать строку в UNICODE , и ему удалось найти решение (у меня это работает с польскими символами, не совсем по-арабски)

Private Const CP_UTF8 = 65001

Private Declare Function MultiByteToWideChar Lib "kernel32" ( _
   ByVal CodePage As Long, ByVal dwFlags As Long, _
   ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, _
   ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long

Public Sub GetResultsCount()
Dim sResponse As String 
Dim html      As HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", "https://www.google.com/search?q=mitsubishi", False
    .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
    .send
    sResponse = StrConv(.responseBody, vbUnicode)
End With
Set html = New HTMLDocument

html.body.innerHTML = sResponse
Debug.Print sUTF8ToUni(StrConv(html.querySelector("#resultStats").innerText, vbFromUnicode))
End Sub

Public Function sUTF8ToUni(bySrc() As Byte) As String
   ' Converts a UTF-8 byte array to a Unicode string
   Dim lBytes As Long, lNC As Long, lRet As Long

   lBytes = UBound(bySrc) - LBound(bySrc) + 1
   lNC = lBytes
   sUTF8ToUni = String$(lNC, Chr(0))
   lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(bySrc(LBound(bySrc))), lBytes, StrPtr(sUTF8ToUni), lNC)
   sUTF8ToUni = Left$(sUTF8ToUni, lRet)
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...