|
文字コードを判定して指定の文字コードに変換するサンプル(VB.NET)

|
<このサンプルの概要>
文字コードを自動判定(判別と言うべきか?)して指定の文字コードに変換するサンプルです。
文字コードの変換にはVB.NETのSystem.Text.Encodingを使用しています。
文字コードの判定には文字コード判定のサンプル(VB6/VB.NET)を使用しています。
VB.NETではSystem.Text.Encodingを使用する事で簡単に文字コードの変換が出来るようです。手順は以下の通りです。
(1)入力ファイルをバイナリ形式で入力
(2)文字コード判定
(3)判定した文字コードをString(UNICODE)に変換
(4)String(UNICODE)を出力したい文字コードのByte配列に変換
(5)出力ファイルをバイナリ形式で出力
(6)ファイルのクローズ
関連情報
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