現在作成中の VB.NET プログラムで扱うファイルが UTF-16 の、しかも Big-Endian で書かれているのを今日知った。(^^;
そのデータをインターネット上から取得して、他のプログラムで使用するためにディスク上に保管するのだが、その、「他のプログラム」が「Shift_JIS で書かれているファイル」を期待しているようである。
つーことで、UTF-16(Big-Endian) のファイルを Shift_JIS に変換して出力する処理を試しに書いてみた。
Imports System
Imports System.IO
Imports System.Text
Imports System.CollectionsModule Module1
Sub Main()
Dim value As String
value = FileRead("U16BE.txt")
FileWrite("SJIS.txt", value)End Sub
Function FileRead(ByVal Fn As String) As String
'---------------------------------------------------------
' UTF-16(Big-Endian) 形式で書かれたテキストを読み込む
'---------------------------------------------------------Dim sr As New StreamReader(Fn, Encoding.BigEndianUnicode)
Dim val As String = sr.ReadToEnd()
sr.Close()Return val
End Function
Sub FileWrite(ByVal Fn As String, ByVal Value As String)
'---------------------------------------------------------
' テキストを Shift_JIS 形式で出力する
'---------------------------------------------------------Dim val As StreamWriter = New StreamWriter(New FileStream(Fn, FileMode.Create), Encoding.GetEncoding("shift_jis"))
val.Write(Value)
val.Close()End Sub
End Module
これで、問題無し。
まあ、よく考えたら、確か VB.NET の内部処理は UTF-16 で行われているので、うまくいって当たり前だわな。