プロが教える店舗&オフィスのセキュリティ対策術

宜しくお願いします。

VB2008で作成したテキストをHTMLで見たときに正常に見えるように変換がしたいのですが。

パソコン -> 繝代た繧ウ繝  化け文字です。

text1.tex にkey入力をした文字のみ化け文字です。
直接記述した文字は化けてはおりません。

多分、VB2008で作成したHTMLの漢字コードはEUCだとおもうのですが、HTMLファイルを作成して見ると文字化けをしています
それでSHIFT-JISに変換を行いたいのですが、関数が分かりません。

A 回答 (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さんのような複雑なコードになっていきます。
(個人でツール代わりに使う程度ならこれでも支障ありませんけどね。。。)

この回答への補足

早速のご回答ありがとう御座います。
試しに試みましたが、test.php.txtと言うファイルが仮に出来ておりますが、中身は空です。
元のtext.phpはやっぱり変化が無いです。

どこかまだ不備があるのでしょうか。

申し訳御座いませんが、助言を宜しくお願い致します。

補足日時:2009/11/04 08:06
    • good
    • 0
この回答へのお礼

済みません。
旨くいきました。

私のプログラムが悪かったのです。
コード変換をした後書き込みをしましたので、けされていたみたいです。
それで、ファイルを作成、データを書き込みした後、コード変換すればばっちり旨くいきました。
有り難う御座いました。

お礼日時:2009/11/06 09:13

VS2008からHTMLを作成するPGのコンテントタイプはどうなっているでしょうか?"Content-Type"の関係で、表示が乱れるってなかったでしたっけ?



最近コーディングから遠ざかっているので、ぱっとコードが例示できないのですが、応急処置としてNKFを使うって言うのはいかがでしょうか?
    • good
    • 0

> 中身は空です。



すみません。Flushし忘れてました。下記の通り1行追加して試してみてください。

' inputの内容をすべて読み込み、outputへ書き込む
output.Write(input.ReadToEnd())

output.Flush() ' ←これを追加してください。

' ストリームを閉じる
input.Dispose()
output.Dispose()

この回答への補足

ご回答有り難う御座います。

でも、やっぱり中身は空っぽですね。

おかしいなー。

最初と変わりませんが。
なんで、空っぽなのかなー??

すみません。
宜しくお願い致します。

補足日時:2009/11/04 20:45
    • good
    • 0
この回答へのお礼

すみません。
以下のファイルクリエイト文を入れたり外したりすると旨くいったりいかなかったりします。

この記述は、コード変換の前に入れております。

最初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

お礼日時:2009/11/04 22:34

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に変換する方法を教えて戴けないでしょうか。
申し訳御座いませんが宜しくお願い致します。

補足日時:2009/11/03 23:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!