NonSoft

文字コードを判定して
指定の文字コードに変換するサンプル(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)ファイルのクローズ

もっと簡単に文字コード変換を実現したい場合はこちらの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