|
|||||
<このサンプルの概要> 文字コードを自動判定(判別と言うべきか?)して指定の文字コードに変換するサンプルです。 文字コードの変換にはVB.NETのSystem.Text.Encodingを使用しています。 文字コードの判定には文字コード判定のサンプル(VB6/VB.NET)を使用しています。 VB.NETではSystem.Text.Encodingを使用する事で簡単に文字コードの変換が出来るようです。 手順は以下の通りです。 (1)入力ファイルをバイナリ形式で入力 (2)文字コード判定 (3)判定した文字コードをString(UNICODE)に変換 (4)String(UNICODE)を出力したい文字コードのByte配列に変換 (5)出力ファイルをバイナリ形式で出力 (6)ファイルのクローズ もっと簡単に文字コード変換を実現したい場合はこちらのDLLがおすすめです。 文字コード判定/変換DLL(VB6/VB.NET/C#.NET) C#.NET版はこちらです。 文字コードを判定して指定の文字コードに変換するサンプル(C#.NET) 関連情報 ADODB.Streamによる文字コード変換のサンプル(VB6/VB.NET) WideCharToMultiByteとMultiByteToWideCharによる文字コード変換のサンプル(VB6/VB.NET) 文字コード判定&変換ツール.NET 文字コード判定/変換ツール(VB6のソース付) ★フォームモジュール(Form1.vb) Private Sub Button1_Click( _ ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click Dim dat() As Byte = New Byte(-1) {} Dim sr As System.IO.Stream = Nothing Dim sw As System.IO.Stream = Nothing Dim br As System.IO.BinaryReader = Nothing Dim bw As System.IO.BinaryWriter = Nothing Try ' 入力ファイルをバイナリ形式で入力 sr = System.IO.File.Open("test1.txt", _ System.IO.FileMode.Open, System.IO.FileAccess.Read) br = New System.IO.BinaryReader(sr) ReDim dat(sr.Length - 1) dat = br.ReadBytes(sr.Length) br.Close() sr.Close() ' 文字コード判定 Dim cod As String = JudgeCode(dat) ' 判定した文字コードをString(UNICODE)に変換 Dim uni As String If cod = "JIS" Then ' JISからUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("ISO-2022-JP").GetString(dat) ElseIf cod = "EUC" Then ' EUCからUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("EUC-JP").GetString(dat) ElseIf cod = "UNICODE" Then ' UNICODEからUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("UNICODE").GetString(dat) ElseIf cod = "UTF7" Then ' UTF-7からUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("UTF-7").GetString(dat) ElseIf cod = "UTF8" Then ' UTF-8からUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("UTF-8").GetString(dat) Else ' SJISからUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(dat) End If ' String(UNICODE)を出力したい文字コードのByte配列に変換 cod = "EUC" If cod = "JIS" Then ' UNICODEからJISへの変換 dat = System.Text.Encoding.GetEncoding("ISO-2022-JP").GetBytes(uni) ElseIf cod = "EUC" Then ' UNICODEからEUCへの変換 dat = System.Text.Encoding.GetEncoding("EUC-JP").GetBytes(uni) ElseIf cod = "UNICODE" Then ' UNICODEからUNICODEへの変換 dat = System.Text.Encoding.GetEncoding("UNICODE").GetBytes(uni) ElseIf cod = "UTF7" Then ' UNICODEからUTF7への変換 dat = System.Text.Encoding.GetEncoding("UTF-7").GetBytes(uni) ElseIf cod = "UTF8" Then ' UNICODEからUTF8への変換 dat = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(uni) Else ' UNICODEからSJISへの変換 dat = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes(uni) End If ' 出力ファイルをバイナリ形式で出力 sw = System.IO.File.Open("test2.txt", _ System.IO.FileMode.Create, System.IO.FileAccess.Write) bw = New System.IO.BinaryWriter(sw) bw.Write(dat) Catch ex As Exception Throw ex Finally ' ファイルのクローズ If br Is Nothing = False Then br.Close() If bw Is Nothing = False Then bw.Close() If sr Is Nothing = False Then sr.Close() If sw Is Nothing = False Then sw.Close() End Try End Sub |