- ベストアンサー
EUCコードをSHIFT-JISに変換したい
宜しくお願いします。 VB2008で作成したテキストをHTMLで見たときに正常に見えるように変換がしたいのですが。 パソコン -> 繝代た繧ウ繝 化け文字です。 text1.tex にkey入力をした文字のみ化け文字です。 直接記述した文字は化けてはおりません。 多分、VB2008で作成したHTMLの漢字コードはEUCだとおもうのですが、HTMLファイルを作成して見ると文字化けをしています それでSHIFT-JISに変換を行いたいのですが、関数が分かりません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
簡単にしてみました。 ' ファイルのパス Dim path As String = "C:\sample.txt" ' UTF8でファイルから入力 Dim input As New IO.StreamReader(path, System.Text.Encoding.UTF8) ' Shift-JISでファイルへ出力 Dim output As New IO.StreamWriter(path & ".txt", False, System.Text.Encoding.GetEncoding("shift_jis")) ' inputの内容をすべて読み込み、outputへ書き込む output.Write(input.ReadToEnd()) ' ストリームを閉じる input.Dispose() output.Dispose() > 私は初心者なので、ちょっと複雑すぎて解りかねます。難しいです。 難しくてもこれがファイルアクセスの現実です。 簡単にしたコードは載せましたが、私ならこのコードは使いません。問題点がいくつもあるからです。それらの問題点を解消していくと#1 himajin100000さんのような複雑なコードになっていきます。 (個人でツール代わりに使う程度ならこれでも支障ありませんけどね。。。)
その他の回答 (3)
- pacusi
- ベストアンサー率0% (0/1)
VS2008からHTMLを作成するPGのコンテントタイプはどうなっているでしょうか?"Content-Type"の関係で、表示が乱れるってなかったでしたっけ? 最近コーディングから遠ざかっているので、ぱっとコードが例示できないのですが、応急処置としてNKFを使うって言うのはいかがでしょうか?
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
> 中身は空です。 すみません。Flushし忘れてました。下記の通り1行追加して試してみてください。 ' inputの内容をすべて読み込み、outputへ書き込む output.Write(input.ReadToEnd()) output.Flush() ' ←これを追加してください。 ' ストリームを閉じる input.Dispose() output.Dispose()
お礼
すみません。 以下のファイルクリエイト文を入れたり外したりすると旨くいったりいかなかったりします。 この記述は、コード変換の前に入れております。 最初1回目は入れておく。そうするとファイルが出来ますので。 入れないとファイルが見つかりませんとエラーがでます。 もう一度デバッグをしますと空ファイルが出来ますので、今度は以下のクリエイト文を外すと旨く文字変換文を書いてくれました。 ファイル名は、test.php.txt です。 このあたりに問題があるようですが、もし解れば宜しくお願い致します。 Dim hStream_main As System.IO.FileStream.System Dim path As String = TextBox1.Text hStream_main = System.IO.File.Create(path) If Not hStream_main Is Nothing Then hStream_main.Close() End If
補足
ご回答有り難う御座います。 でも、やっぱり中身は空っぽですね。 おかしいなー。 最初と変わりませんが。 なんで、空っぽなのかなー?? すみません。 宜しくお願い致します。
- himajin100000
- ベストアンサー率54% (1660/3060)
Option Explicit On Option Strict On Option Compare Binary Option Infer Off Class Q5419829A Shared Sub Main() 'EUC-JPのファイルを読み取ってShift_JISのファイルを書き出す。 '何でこんな複雑に書いているかと言うと '1.pathを文字列で指定するよりもSystem.IO.Streamを引数にとるものを示したほうが 'System.Net.Sockets.NetworkStream等をやりたい場合に応用が利くかな、と。 '2.Windowsの嫌な挙動を回避するため 'http://gihyo.jp/admin/serial/01/charcode/0007 'あと、System.Text.EncodingクラスにはGetStringメソッドやGetBytesメソッドがあるので '併せて見ておくとよい '例外処理(ファイルが見つからなかったときなど)の処理は面倒なので省略している。 Dim str As String Dim fs1 As System.IO.FileStream = New System.IO.FileStream("C:\Q5419829-1.txt",System.IO.FileMode.Open,System.IO.FileAccess.Read) Dim sr As System.IO.StreamReader = New System.IO.StreamReader(fs1, _ System.Text.Encoding.GetEncoding(51932, _ System.Text.EncoderFallBack.ExceptionFallback, _ System.Text.DecoderFallBack.ExceptionFallback _ ) _ ) str = sr.ReadToEnd() sr.Close() Dim fs2 As System.IO.FileStream = New System.IO.FileStream("C:\Q5419829-2.txt",System.IO.FileMode.Create,System.IO.FileAccess.Write) Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(fs2, _ System.Text.Encoding.GetEncoding(932, _ System.Text.EncoderFallBack.ExceptionFallback, _ System.Text.DecoderFallBack.ExceptionFallback _ ) _ ) _ sw.Write(str) sw.Close() End Sub End Class
補足
早速のご回答ありがとうございました。 今調べて見ますと、text1.tex の中身のコードは「UTF8」でした。 UTF-8をもっと簡単に変換する方法は無いのでしょうか。 私は初心者なので、ちょっと複雑すぎて解りかねます。難しいです。 私のプログラムにあわせれば、どこをどう直して良いの解りません。 text1.texの中身のみをUTF-8からSHIT-JISに変換する方法を教えて戴けないでしょうか。 申し訳御座いませんが宜しくお願い致します。
お礼
済みません。 旨くいきました。 私のプログラムが悪かったのです。 コード変換をした後書き込みをしましたので、けされていたみたいです。 それで、ファイルを作成、データを書き込みした後、コード変換すればばっちり旨くいきました。 有り難う御座いました。
補足
早速のご回答ありがとう御座います。 試しに試みましたが、test.php.txtと言うファイルが仮に出来ておりますが、中身は空です。 元のtext.phpはやっぱり変化が無いです。 どこかまだ不備があるのでしょうか。 申し訳御座いませんが、助言を宜しくお願い致します。