ページタイトル取得の文字化けを直すには?

解決


太阪  2004-08-11 01:57:41  No: 85086

はじめまして。
ExcelVBAにて、Streamオブジェクトを使用し、ホームページのタイトルを取得する処理を作っているのですが、EUC-JPコードの一部で文字化けが発生してしまいます。

Sub ページタイトルの取得実験()

    Dim b() As Byte
    Dim HttpRequest As Object
    Dim ReturnedData , GETURL As String
        
    GETURL = Cells(1, 4)
  
    Set HttpRequest = CreateObject("Msxml2.XMLHTTP")
    HttpRequest.Open "GET", GETURL, False

    HttpRequest.Send
    ReturnedData = HttpRequest.responseText
    
    If InStr(GETURL, "yahoo") <> 0 or InStr(ReturnedData, "UTF-8") <> 0 Or InStr(ReturnedData, "utf-8") <> 0 Then
    
        'TITLEタグを抜き出す処理
                        
    ElseIf InStr(ReturnedData, "EUC-JP") <> 0 Or InStr(ReturnedData, "euc-jp") <> 0 Or InStr(ReturnedData, "x-euc-jp") <> 0 Then
    
        ReturnedData = StrConv(HttpRequest.responsebody, vbUnicode)
        
        Dim Stm As ADODB.Stream
        
        Set Stm = New ADODB.Stream
        Stm.Open
        Stm.Type = adTypeText
        Stm.Charset = "Shift_JIS"

        Stm.WriteText ReturnedData
    
        Stm.Position = 0
        Stm.Type = adTypeBinary
        b = Stm.Read()
        Stm.Close
    
        Stm.Open
        Stm.Type = adTypeBinary
        Stm.Write b

        Stm.Position = 0
        Stm.Type = adTypeText
        Stm.Charset = "EUC-JP"
        ReturnedData = Stm.ReadText()
          
        'TITLEタグを抜き出す処理
        
    ElseIf InStr(ReturnedData, "x-sjis") <> 0 Or InStr(ReturnedData, "shift_jis") <> 0 Or InStr(ReturnedData, "SHIFT_JIS") <> 0 _
        Or InStr(ReturnedData, "Shift_JIS") <> 0 Or InStr(ReturnedData, "charset") = 0 Then

        ReturnedData = StrConv(HttpRequest.responsebody, vbUnicode)
        
        'TITLEタグを抜き出す処理

    End If
End Sub

と、作っているのですが、他のコードに対してはうまくいくのですが、EUC-JPコードの場合一部文字化けしてしまうものがあります。
例えば「http://www.pc-success.co.jp/」はタイトル取得がうまくいくのですが、「http://www.rakuten.co.jp/」ではうまくいきません
長文になってしまいましたが、かなり根詰めてしまったので、
皆様の助言、よろしくお願い致します。

IEはv6.0。EXCEL2002/VBAを使用しています。


魔界の仮面弁士  2004-08-11 09:07:14  No: 85087

> ReturnedData = StrConv(HttpRequest.responsebody, vbUnicode)
この時点で、データを破壊してしまっているような。。。

StrConvせず、Byte配列のままバイナリストリームに引き渡してから、
それをEUC-JP形式のテキストストリームとして読み出してみてください。


太阪  2004-08-11 19:25:21  No: 85088

魔界の仮面弁士様、ご返答ありがとうございます。
さっそく言われたとおりに直してみたところ、見事に文字化けせずに取得できました。
改めてStreamオブジェクトの使い方を覚えることもでき、感謝の限りです。
また行き詰ってしまって根詰めたら、質問をするかもしれませんが、これにて解決です。
本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加