- ベストアンサー
VBAでソースが文字化けする問題について
- VBAでホームページのソースを表示している際に、特定のサイト(ソフトバンク)では日本語が文字化けしてしまう問題が発生しています。
- ブラウザで表示した場合や別のサイト(ヤフー)では問題が起きていないため、なぜこのような違いが出るのか疑問です。
- VBAのコードは正常に動作しており、ネットで見つけたものを使用していますが、解決策がわかりません。助けてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 それほど詳しくないのですが、偶々今仕上げているVBAがwinHttp関連でしたので 解答してみます。 Charset の扱いが微妙に違うようですね。 softbank の方は .Charset = "_autodetect_all のように、自動判別でデコード出来ないみたいです。 ごく普通の対応として、ADODB.Streamを介して、 UTF-8を指定して読込む方法が広く知られています。 一応、以下のようにすれば、問題なく読み込めました。 (※ADODBの参照設定など、必要な準備はそちらで適宜お願いします。) ' ' =================================== Option Explicit ' ' ■ クラス:ADODB 参照設定:Microsoft ActiveX Data Objects 6.1 Library ' [VBIDE.references].AddFromGuid Guid:="{B691E011-1797-432E-907A-4D8C69339129}", Major:=6, Minor:=1 ' ' ▼ レイトバインディング: Set obj = CreateObject("ADODB.Stream") Sub Re9037558w() Dim http As WinHttp.WinHttpRequest Dim oAdodbStrm As ADODB.Stream ' ★ Dim vBinBody ' ★ Dim sURI As String Dim sHTML As String Set http = New WinHttpRequest Set oAdodbStrm = New ADODB.Stream ' ★ sURI = "http://www.softbank.jp/" ' sURI = "http://www.yahoo.co.jp" With http .Open "GET", sURI, False .send ' ' ▼HTMLソース バイナリ取得▼ vBinBody = http.ResponseBody ' ★ ' ' 文字コードUTF-8としてデコード ----- With oAdodbStrm ' ★ .Type = adTypeBinary .Open ' ★ .Write vBinBody ' ★ Erase vBinBody ' ★ 省略可 .Position = 0 ' ★ .Type = adTypeText ' ★ .Charset = "UTF-8" ' ★ sHTML = .ReadText(adReadAll) ' ★ .Close ' ★ End With ' ★ End With ' ★ Debug.Print Left(sHTML, 1000) Set http = Nothing: Set oAdodbStrm = Nothing ' ★ End Sub ' ' ===================================
お礼
ありがとうございます