• 締切済み

HTTP接続すると文字化けがおこってしまいます

VB2005です。 HTTPサーバーに接続してデータをテキストボックスに書き出す処理なのですが、どうしても文字化けしてしまい困っています。どうしたらよいでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' HTTPサーバーへ接続する Dim client As New WebClient Try ' HTTPサーバーへ接続しストリームを取得する Dim stream As System.IO.Stream = _ client.OpenRead(TextBox1.Text) ' テキストボックスへ結果を書き出す Dim reader As New System.IO.StreamReader(stream) TextBox2.Text = reader.ReadToEnd() reader.Close() stream.Close() Catch ex As WebException ' URLが不正の場合は例外が発生する MessageBox.Show(ex.Message) End Try End Sub

  • OUHO
  • お礼率65% (86/132)

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

VB2005の場合内部でのもじれつの取り扱いはUnicodeになっています Shift-JISやEUCなど他の文字コードの場合はエンコードが必要でしょう StreamReadにエンコーディングの引数を与えてみましょう たとえば『教えてgoo』の場合は EUCですので Dim reader As New System.IO.StreamReader(stream) を Dim reader As New System.IO.StreamReader(stream, Encoding.GetEncoding("EUC-JP")) といった具合にします Streamから自動判断するような仕組みはネットで検索してみてください

関連するQ&A

  • VBのテキスト書き込み読み出し

    VB初心者です。 VBのテキスト書き込み読み出しについて質問させていただきます。 ~使用オブジェクト~ textbox1 textbox2 button1 button2 現在下記の通りtextbox1とtextbox2に書いた文字(length 10まで)をbutton1 clickで C:\test.txtに書き出し、 button2 clickでtextbox1 と textbox2に戻すプログラムを書いてみました。 読み込みのところが現在は2個ですが、実用的には膨大な数にしたいと思っています。 単純に沢山書けばいいのでしょうが現実的ではないのでスッキリと書く書き方はないでしょうか? さらに、例としてtextbox1にAさんの名前textbox2にAさんの年齢をいれたとします。 その際、Bさん以降を登録したいのですがその場合テキストへの書き込みを次行に書き込み 次行を読み込むにはどのように書けばよろしいでしょうか? ご教授お願い致します。 Public Class Form1 '##################################################### '"C:\test.txt"へ書き込み '##################################################### Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim write_data As New System.IO.StreamWriter("C:\test.txt", False, _ System.Text.Encoding.Default) Dim str As String Dim str1 As String str = String.Format("{0, -10}", TextBox1.Text) str1 = String.Format("{0, -10}", TextBox2.Text) write_data.Write(str & str1) write_data.Close() End Sub '##################################################### '"C:\test.txt"の読み込み '##################################################### Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim Reader As New IO.StreamReader("C:\test.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) While Reader.Peek() > -1 '10文字取得 Dim c(9) As Char Dim d(9) As Char Reader.ReadBlock(c, 0, c.Length) Reader.ReadBlock(d, 0, d.Length) TextBox1.Text = c TextBox2.Text = d End While Reader.Close() End Sub End Class

  • VB TEXT読み取りについて

    このコードでのデバックは成功したのですが、TEXTBOX1にファイルネーム C:\Users\???\Documents\???と入力しても’パスが拒否されました’と出てしまいます。 どう解決したらよいのでしょうか、宜しくお願いします。 Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sr As System.IO.StreamReader = Nothing Try Dim file As String = TextBox1.Text sr = New System.IO.StreamReader(file, System.Text.Encoding.GetEncoding("shift_jis")) Dim doc As String = "" Do Until sr.EndOfStream doc &= sr.ReadLine & vdcrlf() Loop TextBox2.Text = doc Catch ex As Exception MessageBox.Show(ex.Message, "read") Finally If sr IsNot Nothing Then sr.Close() sr.Dispose() End If End Try End Sub Private Function vdcrlf() As String Throw New NotImplementedException End Function End Class

  • htmlソースをテキストボックスに表示させて20行目の10文字の数字を取得したい。

    恐れ入ります。 http://www.microsoft.com/japan/msdn/vbasic/migration/tips/WebClient/ このページのコードを使わせてもらって htmlソースをテキストボックスに表示することはできました。表示させたテキストボックスの20行目の10文字の数字を取得したいのですが、どのようにすれば取得できるんでしょうか?val関数も1行目だけみたいですし・・・。ちなみに20行目は var strReqHomeID = "0000100012"; という具合になっていて  0000100012 を取得したいのです。 -------------------以下コード---------------- Imports System Imports System.Text Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Dim download As New Net.WebClient() Dim temp As Byte() = download.DownloadData(TextBox1.Text) Dim change As Text.Encoding = Encoding.Default TextBox2.Text = change.GetString(temp) Dim filename As String = System.IO.Path.GetFileName(TextBox1.Text) If filename = "" Then filename = "Temp.html" End If Dim strPath = My.Computer.FileSystem.SpecialDirectories.Desktop strPath = strPath + "\" + filename download.DownloadFile(TextBox1.Text, strPath) WebBrowser1.Navigate(TextBox1.Text) Catch ex As Exception Throw End Try End Sub

  • VB TEXTデータについて

    下記のコードでTEXTを読み取りできましたが、読み取ったデータを使用して座標計算したいのですが 例えば、6列6行あるとします、1列目(X)、2列目(y)、3列目(X1)、4列目(y2)、5列目(角度)、6列目(予備)、となっているものが6行あります、1列目・1行の値から、6列目・6行の値まで指定するとき どのようなコードがあるのでしょうか、宜しくお願いします。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sr As System.IO.StreamReader = Nothing ' Try Dim file As String = TextBox1.Text 'SRとは New System.IO.StreamReaderの略 sr = New System.IO.StreamReader(file, System.Text.Encoding.GetEncoding("shift_jis")) Dim doc As String = "" '1行ずつテキストを読み取る Do Until sr.EndOfStream '改行コードが取り除かれてしまうのでVBnewlineで改行を付け直し doc &= sr.ReadLine & vbNewLine Loop 'TEXTBOX.2にdocを代入 TextBox2.Text = doc Catch ex As Exception MessageBox.Show(ex.Message, "read") Finally If sr IsNot Nothing Then sr.Close() sr.Dispose() End If End Try End Sub

  • VB.NET2005からoracle92へ接続するには?

    IDとパスワードを入力し、オラクルのDBにあるIDとパスワードだったら次の画面を開くというプログラムを作りたいです。 オラクルへの接続がうまく行ってないようで画面が固まってしまいます。 プログラムの不具合を教えていただけないでしょうか? よろしくお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cn As New OleDb.OleDbConnection() Dim cmd As New OleDb.OleDbCommand() Dim rs As OleDb.OleDbDataReader cn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=*;User ID=*;Password=*;" cn.Open() '←ここで、エラーになります。 cmd = cn.CreateCommand() cmd.CommandText = "Select ID from abc" rs = cmd.ExecuteReader() While rs.Read() If TextBox1.Text = cmd.CommandText Then MessageBox.Show("パスワードを受付けました。") Dim frm2 As New Form2 frm2.Show() TextBox1.Clear() TextBox2.Clear() Else MessageBox.Show("パスワードが違います。") TextBox1.Text = "" TextBox1.Focus() TextBox1.Clear() TextBox2.Clear() End if     End While cn.Close() rs.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class

  • VB.NET2005からoracle92へ接続する方法。

    IDとパスワードを入力し、オラクルのDBにあるIDとパスワードだったら次の画面を開くというプログラムを作りたいです。 オラクルへの接続がうまく行ってないようで画面が固まってしまいます。 プログラムの不具合を教えていただけないでしょうか? よろしくお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cn As New OleDb.OleDbConnection() Dim cmd As New OleDb.OleDbCommand() Dim rs As OleDb.OleDbDataReader cn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=*;User ID=*;Password=*;" cn.Open() '←ここで、エラーになります。 cmd = cn.CreateCommand() cmd.CommandText = "Select ID from abc" rs = cmd.ExecuteReader() While rs.Read() If TextBox1.Text = cmd.CommandText Then MessageBox.Show("パスワードを受付けました。") Dim frm2 As New Form2 frm2.Show() TextBox1.Clear() TextBox2.Clear() Else MessageBox.Show("パスワードが違います。") TextBox1.Text = "" TextBox1.Focus() TextBox1.Clear() TextBox2.Clear() End if     End While cn.Close() rs.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class

  • VB2010 テキスト書き出し位置

    VisualBasic初心者です。 VB2010でフォームでフォームから複数のTextBoxに入力したものを Buttonクリックイベントでテキストファイルに書き込みを行おうと思っています。 その際、テキストファイルへの書き込み位置を指定したいと思っています。 TextBox1の内容はテキストファイルの1文字目から10文字目 TextBox2の内容は11文字目から20文字目という感じにしたいです。 現在下記のプログラムです。 どなたかご教授ください。 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim write_data As New System.IO.StreamWriter("C:\test.txt", False, _ System.Text.Encoding.Default) write_data.Write(Textbox1.text) write_data.Close() End Sub

  • VB初心者です。コードの書き方が分かりません。

    VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • VB2005で作ったメール送信プログラムで、メール本文が文字化けしてしまいます。

    VB2005でメール送信プログラムを作ったのですが、送信したBODYが文字化けしてしまいます。どう修正すればよいか、教えてください。 以下がそのコードです。 Imports System.Net.mail Public Class Form1 Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click Dim tc As Sockets.TcpClient Dim ns As Sockets.NetworkStream Dim stat As String Dim mailData As String Dim mailFrom As String = "", mailSubject As String = "", mailBody As String = "" Dim r As Regex Dim m As Match Dim mailCount As Integer Try tc = New Sockets.TcpClient() tc.Connect(txtPOP3Server.Text, 110) ns = tc.GetStream Dim buff(tc.ReceiveBufferSize) As Byte ns.Read(buff, 0, tc.ReceiveBufferSize) POP3Transmit(ns, "USER " & txtUserName.Text, False) POP3Transmit(ns, "PASS " & txtPassword.Text, False) stat = POP3Transmit(ns, "STAT", False) r = New Regex("\+OK (.*) (.*)") m = r.Match(stat) mailCount = Val(m.Groups(1).Value) If mailCount = 0 Then MsgBox("メールはありません") Else mailData = POP3Transmit(ns, "RETR " & mailCount, True) ParseMail(mailData, mailFrom, mailSubject, mailBody) txtBody.Text = mailBody txtFrom.Text = mailFrom txtSubject.Text = mailSubject End If Dim smtpClt As New Net.Mail.SmtpClient("smtp.mail.yahoo.co.jp", 25) Dim from As String = "****@yahoo.co.jp" Dim toYou As String = DataGridView1(1, 0).Value Dim subject As String = TextBox2.Text Dim body As String = TextBox1.Text Try smtpClt.Send(from, toYou, subject, body) Timer2.Enabled = True ToolStripStatusLabel2.Text = "送信しました。" Catch ex As Exception MessageBox.Show(ex.Message) End Try POP3Transmit(ns, "QUIT", False) ns.Close() tc.Close() Catch ex As Exception MsgBox("メールの受信に失敗しました") End Try End Sub End Class

  • vb2008で文字列から文字列コードを取得する方法

    サイトHTMLをWebBrowserを使用せずに取得するために、 Dim stream As System.IO.Stream = client.OpenRead(tbItemURL.Text) Dim reader As New System.IO.StreamReader(stream) Dim strHtml = reader.ReadToEnd() reader.Close() stream.Close() のような形で文字列を取得しています。 しかし、この場合Sift-jis等の場合、後の作業(一部データ取得)で文字化けに悩まされます。 http://dobon.net/vb/dotnet/string/detectcode.html 上記サイトで「バイト配列」に格納して判別する方法があります。 そこで、文字列をバイト配列に格納しようとしますが…。 文字列→バイト配列には文字コードが必要となります。 Dim data() As Byte = Encoding.UTF8.GetBytes(text) なんだか鶏と卵のような感じになってしまいます。 文字列から文字コードを判別する方法はないでしょうか? よろしくお願いします。

専門家に質問してみよう