別の仕事で、文字コードに関する質問が出ていたので調べる。外字を含んだShift_JISのデータを、果たしてVB.NETは問題なく処理できるのか?という疑問。いや、こんなことはたぶんわかってる人には当たり前なんだろうけど、わからない人にはわからないわけよ。
というわけでやってみる。まず、外字を作る。外字なんて作ったこと無いよ!というわけで作ったのが上の画像*1。
これを含んだShift_JISファイルを読み込んで表示ができるか、また、表示したものを元のShift_JISで書き出せるかという実験。結果からいうと、問題なし(問題あったら大問題だよな)。ただ、Shift_JISのものを普通に読んでしまうとやはり化けるので、読み込むときに変換をかけてやる必要があるらしい。
Dim stream As FileStream Dim Buffer(1024) As Byte Dim StrBuilder As New StringBuilder stream = File.OpenRead(TextBox1.Text) Dim temp As Encoding = Encoding.GetEncoding("shift_jis") While stream.Read(Buffer, 0, Buffer.Length) > 0 StrBuilder.Append(temp.GetString(Buffer)) End While TextBox2.Text = StrBuilder.ToString
上記のように、読み込んだ文字データにEncoding.GetEncodingで用意したShift_JIS→UNICODE変換をかけてやらないと「@@」みたいな表示になってしまう。また、これを元にまたShift_JISで書き出すには、
Dim FileName As String = _ IO.Path.GetDirectoryName(TextBox1.Text) & _ "\外字ファイル_書き出し結果.txt" Dim fs As New FileStream(FileName, FileAccess.Write, FileShare.Write) fs.Close() Dim stream As New StreamWriter(FileName, True, _ Encoding.GetEncoding("shift_jis")) stream.WriteLine(TextBox2.Text) stream.Close()
こんな感じ。
文字コードの話は嫌い。ややこしいから。
*1:ブログ引っ越しの際に画像は消えてしまいました。ごめんなさい。