投稿/コメントを表示します。

課題に使う新たなデータを求めスクレイピングをした所、いつもの方法ではBodyが文字化けした為、ADODB.Streamを使用した文字化け対策に挑戦しました。以下の過去コメントを参照しコピペで作成。
備忘録として記念投稿します。
因みに、文字化けしたWebページは、文字コードが「utf-8」でした。

結局、取得したかった数字は全て画像データ?となっていたので、文字化け解消してもデータ取得は不可でした。。。

ADODB.stream使う際は、該当の文字をByte型の配列に入れて、
下にある手順で設定をすれば何とかなる所までは分かりました。(^^)
(Byte型で読み込ませて、設定後、テキスト型で出力。)
'必要なライブラリ:
'[1] Microsoft ActiveX Data Object x.x Library -> 文字コード変更のため(x.x の部分は一番大きいバージョンを選べばまず間違いなくOK)
'[2] Microsoft WinHTTP Services, version 5.1 -> HTTPリクエストをするため

Sub GetRequestSimple1()
    Dim url As String
    url = "ここにhttp://~のURLを記入"

    Dim xh As New WinHttp.WinHttpRequest 'HTTPリクエストを制御するクラスのインスタンスを生成
    xh.Open "GET", url, False
    xh.send
    
    Dim sCode As String
    sCode = xh.Status
    If sCode <> 200 Then 'ステータスコードを調べる
        MsgBox "リクエストに失敗しました" & vbNewLine & sCode
    End If
    
    '普通にボディを取ってくると何故か文字化けする為、ADODB.Streamで文字化け対策
    '因みに上記のWebページの文字コードはutf-8
    '1.ボディを取ってきて、Byte型の配列に入れる
    Dim get_body() As Byte
    get_body = xh.ResponseBody
    
    
    Dim msg1 As String
    Dim msg2 As String
    msg1 = get_body 'Byte()を文字列に変換(msg1 as string だから)
    MsgBox msg1
    
    
    '2.ADODB.streamで、文字化け対策
    Dim ado_stream As New ADODB.Stream
    
    ado_stream.Open
    ado_stream.Position = 0
    ado_stream.Type = 1
    ado_stream.Write get_body
    
    ado_stream.Position = 0
    ado_stream.Type = 2
    ado_stream.Charset = "utf-8"
    msg2 = ado_stream.ReadText
    ado_stream.Close
    
    MsgBox msg2
    
    Range("B2").Value = msg2
    
End Sub


2021/01/04 13:20