DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ソース取得で全角文字が正しく表示できません

環境/言語:[Windows XP]
分類:[.NET]

2006/03/02(Thu) 01:15:16 編集(投稿者)

お世話になります。

ソースリスト(TextBox1.Text)取得で全角文字が正しく表示できません。

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

Dim webClient As New System.Net.WebClient()
Dim sr As System.IO.Stream = webClient.OpenRead("http://www.xxx.jp/")
Dim srRead As New System.IO.StreamReader(sr)
TextBox1.Text = srRead.ReadToEnd()
srRead.Close()

End Sub

ソースリスト(TextBox1.Text)で半角文字は問題ありませんが、
全角文字で文字化けしてしまいます。
全角文字が正しく表示できます何か良い方法はありませんでしょうか。
宜しくお願い致します。
> Dim sr As System.IO.Stream = webClient.OpenRead("http://www.xxx.jp/")
このサイトは、どの文字コードのデータを返しているのでしょうか?

> Dim srRead As New System.IO.StreamReader(sr)
sr だけ指定して、文字コードが未指定ですよね。
New する際に、第2引数に System.Text.Encoding クラスを指定しましょう。

> ソースリスト(TextBox1.Text)で半角文字は問題ありませんが、
> 全角文字で文字化けしてしまいます。
Encoding を指定しなかった場合、UTF-8 として解釈されるからです。
UTF-8 で書かれたサイトであれば、文字化けせずに読み取れるでしょうが、
元のページが EUC-JP や Shift_JIS だった場合には、半角英数字は良くても、
漢字などは化けてしまうでしょうね。
魔界の仮面弁士さん
ご返答ありがとうございました。遅れて申し訳ありませんでした。

すみませんでした。サイトは"http://www.yahoo.co.jp/"です。

> Dim srRead As New System.IO.StreamReader(sr)
>sr だけ指定して、文字コードが未指定ですよね。
>New する際に、第2引数に System.Text.Encoding クラスを指定しましょう。
第2引数につきましては以下の記述で修正してみました。
Dim srRead As New System.IO.StreamReader(sr, System.Text.Encoding.Default)

> ソースリスト(TextBox1.Text)で半角文字は問題ありませんが、
> 全角文字で文字化けしてしまいます。
>Encoding を指定しなかった場合・・・・・・・

TextBox1.Text = srRead.ReadToEnd()のどこにEncodingを設定すればよいのか
いろいろと行ってみましたが、分かりませんでした。
> すみませんでした。サイトは"http://www.yahoo.co.jp/"です。
ならば、euc-jp ですね。

> 第2引数につきましては以下の記述で修正してみました。
> Dim srRead As New System.IO.StreamReader(sr, System.Text.Encoding.Default)
いや、Default ではまずいでしょう。
サイトが返す内容にあわせたエンコードを指定しないと。

> TextBox1.Text = srRead.ReadToEnd()のどこにEncodingを設定すればよいのか
> いろいろと行ってみましたが、分かりませんでした。
コンストラクタで指定します。New のときですね。
魔界の仮面弁士さん
ご返答ありがとうございました。
ご指導頂きました記述について調べてみます。
まだ慣れていませんのでいろいろと行ってみたいと
思いますのでしばらくかかると思います。
また、何かありましたら宜しくお願いいたします。
■No15335に返信(genki さんの記事)
> 魔界の仮面弁士さん
> ご返答ありがとうございました。
> ご指導頂きました記述について調べてみます。
> まだ慣れていませんのでいろいろと行ってみたいと
> 思いますのでしばらくかかると思います。
> また、何かありましたら宜しくお願いいたします。
>
えー

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

をなおすだけだよね?

Dim srRead As New System.IO.StreamReader(sr, System.Text.Encoding...)

魔界の仮面弁士氏はかなり直接的な答えを書いてますよ。
魔界の仮面弁士さん
ご返答ありがとうございました。
ご指導してもらいましたeuc-jpをDefaultに変更してみましたが
(sr, System.Text.Encoding.euc-jp)
思う通りにいきませんでしたのでしばらくかかると思いました。
Encoding.........)Encoding以降の.........部分の記述だけでよいとの
魔界の仮面弁士さんの直接的な答えでしたので行ってみます。
ありがとうございました。
> ご指導してもらいましたeuc-jpをDefaultに変更してみましたが
GetEncoding メソッドを使いましょう。


> (sr, System.Text.Encoding.euc-jp)
これだと、「Encoding.euc プロパティ から、jp を引き算している」事になりますね。
# もっとも、euc というプロパティ自体が存在しませんけれども。(^^;


> 思う通りにいきませんでしたのでしばらくかかると思いました。
このサイトの「.NET Tips」に、そのものズバリがありますよね。

『ストリームを使ってテキストファイルを読み込む』
『文字コードを指定してテキストファイルを読み込む』というのが。
魔界の仮面弁士さん
ご返答ありがとうございました。
>このサイトの「.NET Tips」に、そのものズバリがありますよね。
>『ストリームを使ってテキストファイルを読み込む』
>『文字コードを指定してテキストファイルを読み込む』というのが。
ご指導ありがとうございます。「.NET Tips」からそのものズバリを
探してみます。ありがとうございました。
2006/03/02(Thu) 17:58:03 編集(投稿者)

魔界の仮面弁士さんのご指導によりまして解決する事ができました。
>Dim srRead As New System.IO.StreamReader(sr, System.Text.Encoding...)
下記の用にしました。
Dim srRead As New System.IO.StreamReader(sr,System.Text.Encoding.GetEncoding(932))
全角文字が化けることなく表示できました。
ありがとうございました。心よりお礼を申し上げます。
> >Dim srRead As New System.IO.StreamReader(sr, System.Text.Encoding...)
> 下記の用にしました。
> Dim srRead As New System.IO.StreamReader(sr,System.Text.Encoding.GetEncoding(932))
> 全角文字が化けることなく表示できました。

ん? 『http://www.yahoo.co.jp/』なんですよね? であれば、GetEncoding に
指定するのは、『 "euc-jp" 』または『 51932 』だと思いますよ。

932 だと Shift_JIS なので、化けて表示されると思います。
(当方では化けましたし)
解決済み!
2006/03/02(Thu) 20:57:11 編集(投稿者)

魔界の仮面弁士さん
度々、ご返答ありがとうございました。
今回は大変勉強になりました。
変換するエンコーディングにより
使い分けする必要のあることが学べました。
お礼を申し上げます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板