別の仕事で、文字コードに関する質問が出ていたので調べる。外字を含んだ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:ブログ引っ越しの際に画像は消えてしまいました。ごめんなさい。