C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: WEB上の文字列をうまくエンコードできない場合があるのですが


(過去ログ 78 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■46351 / inTopicNo.1)  WEB上の文字列をうまくエンコードできない場合があるのですが
  
□投稿者/ みずむす (1回)-(2010/01/31(Sun) 01:25:12)

分類:[VB.NET/VB2005 以降] 

恐れ入ります。みずむすと申します。

VB.NETでグーグルサジェストを取得できないかなあ、と色々やったところこのように

http://suggestqueries.google.com/complete/search?hl=ja&qu=ここにキーワード

すると取得できるらしいとわかったため、簡単なプログラムを書いてみたところ
あっさりと取得出来ていました。

--- そのときのソース 以下は”夫”と検索した場合 ---
Dim wc As New System.Net.WebClient()
Dim st As System.IO.Stream = wc.OpenRead("http://suggestqueries.google.com/complete/search?hl=ja&qu=%E5%A4%AB")
'UTFで読み込んでしまう
Dim sr As New System.IO.StreamReader(st)
textbox.text = sr.ReadToEnd()
------------------------------------------------------


しかし本日起動してみると、文字化けするようになってしまいました。
グーグルがなにか仕様変更かな?と思ったのですが、
firefoxでこのURL を開いてみると、なんの問題もなくエンコードUTF8で表示出来ています。

原因分からないまま、試しにUTF8でエンコードすればいいのかと思い、取得部分をいかのように変更してみましたが、
文字化けはそのまま・・・

Dim sr As New System.IO.StreamReader(st)

Dim sr As New System.IO.StreamReader(st, System.Text.Encoding.GetEncoding(65001))
------------------------------

で、いろいろ悩んでいたんですが、
実はIEでこのURLにアクセスするとブラウザには表示できず、ダウンロードになります。

で、ダウンロードファイルを開くと結果が出ているわけですが、
もしかして一度ダウンロードすればいいのかも・・・ということで以下のようにダウンロードすると、
文字化けせずにきちんとUTF8にてファイルに書き込まれてきました。
------------------------------
Dim wc As New System.Net.WebClient()
wc.DownloadFile("http://suggestqueries.google.com/complete/search?hl=ja&qu=%E5%A4%AB", "C:\download.txt")
wc.Dispose()
------------------------------

とすると、
URLアクセス→ファイル書き込み→読み込み→テキストボックスに書く
とすればなんとかなることは分かりましたが、どうも納得できません。


これはどうしてなのでしょうか・・・???

引用返信 編集キー/
■46352 / inTopicNo.2)  Re[1]: WEB上の文字列をうまくエンコードできない場合があるのですが
□投稿者/ Hongliang (551回)-(2010/01/31(Sun) 06:47:48)
クエリ文字列に &oe=utf8 を追加すれば、結果を UTF-8 で返すように明示することができます。
なお、今どんなエンコーディングされているかは、WebClient の ResponseHeader 内の、Content-Type に記述されています。
引用返信 編集キー/
■46353 / inTopicNo.3)  Re[2]: WEB上の文字列をうまくエンコードできない場合があるのですが
□投稿者/ みずむす (2回)-(2010/01/31(Sun) 11:31:00)
> Hongliang 様

早速ありがとうございます!

まずはResponseHeader を確かめてみようと思います。


引用返信 編集キー/
■46355 / inTopicNo.4)  Re[2]: WEB上の文字列をうまくエンコードできない場合があるのですが
□投稿者/ みずむす (3回)-(2010/01/31(Sun) 12:39:41)
No46352 (Hongliang さん) に返信
> クエリ文字列に &oe=utf8 を追加すれば、結果を UTF-8 で返すように明示することができます。
> なお、今どんなエンコーディングされているかは、WebClient の ResponseHeader 内の、Content-Type に記述されています。


> Hongliang さん

早速やってみました!

Dim ContentType As String = wc.ResponseHeaders.Item("Content-Type")
msgbox(ContentType)

とやってみたところ

「Shift-JIS」だ

と出ました。


System.Text.Encoding.GetEncoding(932)
としてみたところ、正常に取得することができました・・・!!!!

感謝です!とってもすっきりしました!!!

※ とはいえブラウザだとUTF-8で表示しているのがなぜなのか不明なままですが・・・
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -