• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでソースが文字化けします。)

VBAでソースが文字化けする問題について

このQ&Aのポイント
  • VBAでホームページのソースを表示している際に、特定のサイト(ソフトバンク)では日本語が文字化けしてしまう問題が発生しています。
  • ブラウザで表示した場合や別のサイト(ヤフー)では問題が起きていないため、なぜこのような違いが出るのか疑問です。
  • VBAのコードは正常に動作しており、ネットで見つけたものを使用していますが、解決策がわかりません。助けてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 ' ' ===================================

okidsaya555
質問者

お礼

ありがとうございます

関連するQ&A