VB2008ファイル読み書きの文字化け問題と解決方法

このQ&Aのポイント
  • VB2008のファイル読み書きで文字化けが発生する問題があります。文字化けを解消する方法を探しています。
  • 現在VB2008を使用してプログラムを作成中ですが、ファイル読み書きの際に文字化けの問題が発生しています。この問題の解決策を教えてください。
  • VB2008でのファイル読み書き時に文字化けが起こる問題があります。この問題を解決する方法を教えてください。
回答を見る
  • ベストアンサー

vb2008より、ファイル読み込み書き込みの際に発生する文字化けについて

 初めて投稿させて頂くkuro_sanと申します。どうぞよろしくお願いします。  現在visual basic 2008を用いてプログラムを作成しているのですが、データの読み込み、書き込みを行う箇所で問題が発生したために、行き詰まっております。  コードを以下に示させて頂きます。 [書き込み処理関数] Private Sub WriteLog(ByVal FileName As String) 'File Open Dim Writer As New IO.StreamWriter(FileName, True) '書き込み処理 For i As Integer = 0 To i Writer.WriteLine(Table(0, i) & "," & Table(1, i) & "," & Table(2, i)) Next Writer.Close() End Sub [読み込み処理関数] Private Sub Readlog(ByVal FileName As String) Dim Reader As New IO.StreamReader(FileName, System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Items() As String = New String() {} Dim Line As String = Reader.ReadLine 'CSVの一行 'データの読み込み i = 0 Do Until IsNothing(Line) Items = Line.Split(",") i += 1 Table(0, i) = Items(0).ToString Table(1, i) = Items(1).ToString Table(2, i) = Val(Items(2)) Line = Reader.ReadLine Loop End Sub です。  書き込みはtext形式の物に行っています。Table配列には(0,i),(1,i)にはString型の文字が、(2,i)には数字が入力されています。 入力、出力は行うことが出来るのですが、(0,i),(1,i)にひらがな、カタカナ、漢字などの文字が使われていると、読み込みを行った際に文字化けして格納されてしまいます。 (例:くろ,kuro,1 → 縺上m,kuro,1)  出力されたtextの中では文字化けが起こっていませんが、形式を直接csvに変換したり、読み込みを行った際に文字化けが発生している事から、書き込み時に問題があるのではないか、と思い調べているのですが、原因を判明できていません。 文字化けを発生させずに読み込み、書き込み処理を行う方法をご存知である方がいらっしゃればご教授頂けますと幸いです。

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

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

StreamWriterのそのタイプのコンストラクタはUTF-8で書き込みます それに対してStreamReaderでのエンコーディングがShiftJISを指示しているので文字化けが発生します StreamReaderのコンストラクタを Dim Reader As New IO.StreamReader(FileName, System.Text.Encoding.UTF8) といった具合にして見ましょう またShiftJISで統一するならStreamWriterを Dim Writer As New IO.StreamWriter(FileName, True, System.Text.Encoding.GetEncoding("Shift-JIS")) といった具合に エンコーディングの形式を引数で与えましょう

kuro_san
質問者

お礼

コンストラクタを変更した所、見事に問題を解決することが出来ました。 迅速にご指摘して頂き、誠に有り難う御座いました。

関連するQ&A

  • VB6.0 文字列のファイル書き込み

    こんにちは。 VB6.0を研修中の新人です。 テキストファイルにランダムアクセスをし半角全角混じりの文字列を書き込むコードを考えています。 連休中は会社に入れないので自宅でコードをどのように書くかある程度決めておきたいです。 ■ あいうえお ■ カキクケコ ■ サシスセソ   (サシスセソは半角です)   ■ タチツテトはひ (タチツテトは半角です) メモ帳.txtに文字列を書き込むと上記のように書き込まれます。 これは見た目が悪いので下記のように"■ "がないように書き込むことは無理でしょうか。 あいうえお カキクケコ サシスセソ    (サシスセソは半角です) タチツテトはひ  (タチツテトは半角です) いま書いたコードは下記のとおりです。 Public Sub Main() WriteFile End Sub '書き込む関数 Public Sub WriteFile()   Dim i As Integer   Dim str As String   Open "C:\メモ帳.txt" For Random As #1 Len = 14   Do While < 5     Select Case i       Case 1 str="あいうえお"       Case 2 str="カキクケコ"       Case 3 str="サシスセソ"       (サシスセソは半角です)       Case 4 str="タチツテトはひふへほ" (タチツテトは半角です)     End Select     strNagasa(str,10) + vbCrlf     Put #1,i,str     i = i + 1   Loop   Close #1 End Sub '文字列をレコードの長さに合わせる関数(いまの場合は10バイト) 'Nagasaが"10"の場合 'strが "サシスセソ" なら "サシスセソ" に半角スペースを5個詰めて返す。 'strが "タチツテトはひふへほ" なら "タチツテトはひ" の9バイトで文字列を切って半角スペースを1個詰めて返す。 Public Function StrNagasa(str As String,Nagasa As Integer) As String   ...   省略(完成済み)   ... End Function

  • 【VB2005】です。txtファイルを配列に読み込もうとしています。

    45*45のtxtデータを配列に読み込もうとしているのですが、エラーが出ます。なぜでしょうか? 宜しくお願いします。 【VB2005を使っています。】 Private Sub OpenButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenButton1.Click Dim selectButton As DialogResult Dim filename As String Dim i, j As Integer \'開く ダイアログの表示 selectButton = DBOpenDialog1.ShowDialog() filename = DBOpenDialog1.FileName If selectButton = Windows.Forms.DialogResult.OK Then Dim sr As System.IO.StreamReader = Nothing Dim readFields() As String i = 0 sr = New System.IO.StreamReader(filename, System.Text.Encoding.Default) Do Until sr.EndOfStream readFields = sr.ReadLine().Split(\",\") For j = 0 To 44 Tests1(i, j) = readFields(j) Next j i += 1 Loop sr.Close() End If End Sub

  • VB2005でのファイル操作について

        Dim filedata As String Dim fileNum As Integer Dim fileName As String Dim i As Integer fileName = "C:\Paradata.txt" fileNum = FreeFile() FileOpen(fileNum, fileName, OpenMode.Output) For i = 0 To 9 filedata = data(i, 0) & "," & data(i, 1)・・・・・ PrintLine(fileNum, filedata) Next FileClose あるボタンを押しますと上記のようにテキストファイルにデータを保存しようとしているのですが、1回目のボタンクリックではエラーが無いのですが2回目以降は"別のプロセスで使用されているため、プロセスはファイル 'C:\Paradata.txt' にアクセスできません。"のエラーが発生してしまいます。いろいろと調べているのですがまだわからないのでどこがおかしいか教えてください。よろしくお願い致します。

  • VB 配列の内容をファイルに書き込む

    VB2008を使用しています。 stg_bitという配列に一文字ずつ「abc・・・」 のように入っているものを、テキストファイルに出力したいのですが・・・ stg_bitという配列の内容をファイルに書き込みたいのですが、 うまくいきません。 ご教授お願いします!! Dim i As Integer Dim stg_str As String Dim Writer As New IO.StreamWriter("C:sample.txt") Writer.WriteLine(stg_bit) Writer.Close()

  • VBAでソースが文字化けします。

    ホームページのソースをVBAで表示してみてます。 ヤフーhttp://www.yahoo.co.jp/の場合は問題ないのですが、 ソフトバンクhttp://www.softbank.jp/の場合は日本語が文字化けしてしまいます。 何が違うんでしょうか。 ブラウザで表示して、ソースを表示させてみるとどちらも文字化けせす正常に表示されます。 どなたか教えてください。 コードこんな感じです、ネットで探したものです。 Sub test() Dim http As WinHttp.WinHttpRequest Dim sURI As String Dim sHTML As String Set http = CreateWinHttpRequest 'sURI = "http://www.softbank.jp/" sURI = "http://www.yahoo.co.jp" With http .open "GET", sURI, False .send sHTML = .ResponseText End With Debug.Print sHTML End Sub

  • VB.NETでのデータベース書き込みについて

    リストレビューに表示されているデータをデータベースに書き込む処理を追加したいのですが、データセットにメモリ上のテーブルを作成してデータベースへ書き込む方が良いのでしょうか? それとも直接データベースに書き込む方が良いのでしょうか? 前者のテーブル作成のコードは書きの通りです。 Public Function AddDataSetTable(ByVal kojo_cd() As String, ByVal kojo_name() As String, ByVal kojo_date() As String)   Dim dtSet As New DataSet("DataSetTable")   Dim dtTable As New DataTable("CalDatTable")   Dim fmain As New FrmMain   Dim i As Integer   'テーブルに列を追加    With dtTable.Columns     .Add("コード")     .Add("名称")     .Add("日にち")    End With   'テーブルに行を追加   With dtTable.Rows    For i = 0 To UBound(kojo_cd)     .Add(New Object() {kojo_cd(i), kojo_name(i), kojo_date(i)})    Next i   End With   'データセットにテーブルを追加   dtSet.Tables.Add(dtTable) End Function

  • 文字化けについて

    アクセスのテーブルをTransferTextでエクスポートし、 そのソースの中身のタグをVBAで置換したいのですが Sub test1() Dim objIE As Object Dim myStr As String Dim t As String t = "Table" DoCmd.TransferText acExportHTML, , t, MyDesktop & "\" & t & ".html", True Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", MyDesktop & "\" & t & ".html", False objIE.send myStr = objIE.responseText myStr = Replace(myStr, "<TD DIR=LTR ALIGN=RIGHT>", "<TD>") Debug.Print myStr Set objIE = Nothing End Sub これだと、日本語部分が?になってしまいます。 なので、 myStr = objIE.responseText を myStr = StrConv(objIE.responseText, 64) に変更したら、余分なスペースが入り、結局文字化けしたままです。 http://www2s.biglobe.ne.jp/iryo/vba/IE/http1.html を参考にしたのですが、日本語を含むソースの場合はどうすればいいでしょうか?

  • VB6.0のモジュール内が文字化けを直す方法を教えていただけないでしょ

    VB6.0のモジュール内が文字化けを直す方法を教えていただけないでしょうか。 Visual Studio2008で作成したものを、 VB6.0で見ようとしています。 以下のようにコードが文字化けしているのですが、 どうしたら文字化けを直すことが出来るのでしょうか? ご存知の方がおられましたら教えてください。 どうぞよろしくお願いいたします。 Public 蜈・蜉帙ヵ繧。繧、繝ォ As String, 險ュ螳壹ヵ繧。繧、繝ォ As String, 邨先棡繝輔ぃ繧、繝ォ As String Public 迴セ蝨ィ繝代せ As String, 繝・・繧ソ繝代せ As String Public DataFile As System.IO.StreamReader

  • VB2008 txtファイル保存

    こんにちは、Vb2008を勉強しています。 デスクトップに保存している、TXTファイルに、 フォームで入力したデータを追加保存したいと思い、ネットで調べたり…で 入力しましたが、txtファイルを開いてみると文字化けしてしまします。 Dim writer As System.IO.FileStream = _ System.IO.File.OpenWrite("C:\Users\Desktop\顧客管理.txt") 'SystemWriterオブジェクトを作成し、テキストデータが書き込めるようにする Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(writer) 'ファイルの末尾に移動する sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) 'データを書き込む sw.WriteLine(TextBox1.Text & "," & TextBox2.Text & "," & TextBox3.Text) 'ファイルを更新する sw.Flush() 'ファイルを閉じる sw.Close() writer.Close() 上記の方法で文字化けだったので、またまた、調べて入力しましたが 今度は、改行されず…単純な、データの追加のようになってしまっています。 私は、新しい行に追加できるようにしたいです。 下のコードは文字コードの指定をしたので、保存はできますが、 改行されません。 Dim FileName As String = "C:\Users\Desktop\確認.txt" Dim Writer As IO.StreamWriter Dim Encode As System.Text.Encoding '文字コードにShiftJISを指定。 Encode = System.Text.Encoding.GetEncoding("Shift-JIS") '既に存在するテキストに追加する場合は第2引数をTrueにする。 Writer = New IO.StreamWriter(FileName, True, Encode) Writer.Write(TextBox1.Text & "," & TextBox2.Text) Writer.Close() どなたか、教えていただけませんでしょうか?

  • 文字コードを指定すると文字化けする理由は?

    HTMLのソースが入ったテキストデータをエクセルに書き出したいのですが 文字コードは何を指定すればいいのでしょうか? Sub Sample() Dim i As Long Dim j As Long Dim strList As String Dim strSplit() As String Dim adoSt As New ADODB.Stream i = 1 With adoSt .Type = adTypeText ' .Charset = "UTF-8" ' .Charset = "euc-jp" ' .Charset = "Shift_JIS" .Open .LoadFromFile ("C:\test.html") Workbooks.Add Do While Not (.EOS) strList = .ReadText(adReadLine) strSplit = Split(strList, ",") For j = LBound(strSplit) To UBound(strSplit) Cells(i, j + 1) = strSplit(j) Next i = i + 1 Loop .Close End With End Sub どの文字コードを指定してもエラーになります。 Cells(i, j + 1) = strSplit(j) の部分で、エラーになります。 実際のソースの文字コードはeuc-jpになっています。 なぜソースと同じ文字コードを指定してるのにエラーになるのでしょうか? .Charsetで 文字コードを何も指定しなければ、問題なくソースを書き出せます。

専門家に質問してみよう