NonSoft

文字コード判定/変換DLL(VB6/VB.NET/C#.NET)


 ダウンロード

文字コード判定(SJIS/JIS/EUC/UNICODE/UTF7/UTF8/バイナリ)、文字コード変換ライブラリ(DLL)

ダウンロード  使用例(VB6)  使用例(VB.NET)  使用例(C#.NET)  使用例(VBS) 

※ 文字コード関係のその他のツール、サンプルソースはこちらです。文字コード判定/文字コード変換

====================================================================================================
【タイトル     】文字コード判定/変換DLL(VB6/VB.NET/C#.NET)
【Version      】1.0.0.7
【ファイル     】NonCodeDll.zip
【圧縮ファイルの中身】NonCodeVb6.dll、NonCodeNet.dll、ReadMe.txt、サンプルソース
【動作確認     】Windows8/Windows7/XP/2000
【必要ソフト    】VB6ランタイムまたはMicrosoft .NET Framework Version 2.0
【ソフト種別    】フリーソフト(寄付歓迎)
【作者/著作権者  】のん
【作者への連絡先  】http://nonsoft.la.coocan.jp/
【最近の主な変更(1) 】VB SCRIPTでの文字コード判定/変換対応(VBSとVBAで動作確認)
====================================================================================================
1.はじめに
  本プログラムをダウンロード頂きまして誠にありがとうございます。
  本プログラムは、文字コードの判定や変換をするDLLです。
  サンプルソースとしてVB6版/VB.NET版/C#.NET版を用意しています。
  本DLLは「文字コード判定/変換ツール」や「文字コード判定&変換ツール.NET」で
  使っているロジックをライブラリ化しました。
  対応している文字コードはSJIS/JIS/EUC/UNICODE/UTF7/UTF8/バイナリです。
  (注)100%完璧な文字コード判定は文字コードの性質上ありえませんが、
    可能な限り高精度な判定を目指しています。

  (注)64ビットの環境(Windows7等)でVBSを実行する際はSysWOW64を使用してください。
     (例)C:\Windows\SysWOW64\CScript.exe VbsAp.vbs

2.インストール方法/アンインストール方法
  本プログラムはインストール操作が必要ありません。
  アンインストール操作も必要ありませんので、本プログラム一式を削除してください。

  NonCodeVb6.dllを使用する場合はVB6がインストールされている必要があります。
  NonCodeNet.dllを使用する場合はVS2005(Microsoft .NET Framework Version 2.0)以上が
  インストールされている必要があります。

  -------------------------------------------------------------------------------------
  ※VS2010(Microsoft .NET Framework Version 4.0)版は次のURLからダウンロード出来ます。
  VS2010(Microsoft .NET Framework Version 4.0)版のダウンロード
  -------------------------------------------------------------------------------------

3.著作権・ライセンス
  本プログラムの全ての著作権は「のん」が所有しています。
  本プログラムを転載する場合は著作権所有者の許可が必要となります。
  (NonSoftの紹介リンクは問題ありませんので宜しくお願いします)
  また、著作権所有者が許可したサイトでのみダウンロードが可能となります。
  再配布は禁止させて頂きます。商用利用についての制限はありません。

  本プログラムはフリーライセンス(寄付歓迎)です。
  本プログラムを長期間使用される場合は、寄付やホームページ紹介等してください。
  寄付はこちらでお願いします。http://nonsoft.la.coocan.jp/kifu.html

4.免責事項
  本プログラムが原因による損害・問題に対し一切の責任を負えません。
  ご利用者の責任の範囲内でお使いください。

5.作者への問合せについて
  作者への問合せはメールのみとさせて頂きます。
  問合せ内容によっては回答出来ない場合もございますので予めご了承願います。
  また、作者不在時または問い合わせ数が多い場合など、
  回答に日数がかかる場合がございますので予めご了承願います。

<使用例(VB6)>
Option Explicit
' カレントディレクトリを変更するAPI
Private Declare Function SetCurrentDirectory Lib "kernel32" Alias _
    "SetCurrentDirectoryA" (ByVal CurrentDir As String) As Long

Private objNonCode As Object    ' 文字コード判定/変換オブジェクト
Private strOutCode As String    ' 出力文字コード

Private Sub Form_Load()
    On Error Resume Next
    
    ' カレントフォルダの変更
    SetCurrentDirectory App.Path
    
    ' NonCodeVb6.dllの存在チェック
    On Error Resume Next
    If CreateObject("NonCodeVb6.NonCodeClass") Is Nothing Then
        If Len(Dir("NonCodeVb6.dll")) <> 0 Then
            ' NonCodeVb6.dllのレジストリ登録
            Shell "regsvr32 /s NonCodeVb6.dll", vbHide
        Else
            ' NonCodeVb6.dllをCode2Code.exeと同じフォルダに置いてください。
            MsgBox _
            "NonCodeVb6.dllが見つかりませんでした。" & vbCrLf & vbCrLf & _
            "NonCodeVb6.dllを" & vbCrLf & "[" & App.Path & "]" & vbCrLf & _
            "に置いてください。"
            End
        End If
    End If
    On Error GoTo 0
    
    Set objNonCode = CreateObject("NonCodeVb6.NonCodeClass")
End Sub

Private Sub Command1_Click(Index As Integer)
    Select Case Index
    Case 0
        ' SJISへの変換
        strOutCode = "SJIS"
    Case 1
        ' JISへの変換
        strOutCode = "JIS"
    Case 2
        ' EUCへの変換
        strOutCode = "EUC"
    Case 3
        ' UNICODEへの変換
        strOutCode = "UNICODE"
    Case 4
        ' UTF7への変換
        strOutCode = "UTF7"
    Case 5
        ' UTF8への変換
        strOutCode = "UTF8"
    End Select
    TextCodeChg
End Sub

Private Sub TextCodeChg()
    ' テキストをバイト配列で読込
    Dim ipath As String: ipath = App.Path & "\TestUtf8.txt"
    Dim idat() As Byte
    ReDim idat(FileLen(ipath) - 1) As Byte
    Dim intFileNo As Integer
    intFileNo = FreeFile
    Open ipath For Binary As intFileNo
    Get intFileNo, , idat
    Close intFileNo
            
    ' 文字コード判定(blnBin=バイナリ判定無し)
    Dim cod As String: cod = objNonCode.GetCodeName(idat, blnBin:=False)

    ' 判定した文字コードをString(UNICODE)に変換
    Dim uni As String
    Select Case cod
        Case "SJIS"
            ' SJISからUNICODEへの変換
            uni = objNonCode.SJIS_To_VbUnicode(idat)
        Case "JIS"
            ' JISからUNICODEへの変換
            uni = objNonCode.JIS_To_VbUnicode(idat)
        Case "EUC"
            ' EUCからUNICODEへの変換
            uni = objNonCode.EUC_To_VbUnicode(idat)
        Case "UNICODE"
            ' UNICODEからUNICODEへの変換
            uni = objNonCode.UNICODE_To_VbUnicode(idat)
        Case "UTF7"
            ' UTF-7からUNICODEへの変換
            uni = objNonCode.UTF7_To_VbUnicode(idat)
        Case "UTF8"
            ' UTF-8からUNICODEへの変換
            uni = objNonCode.UTF8_To_VbUnicode(idat)
        Case "BIN"
            ' SJISからUNICODEへの変換
            uni = objNonCode.SJIS_To_VbUnicode(idat)
        Case Else
            ' SJISからUNICODEへの変換
            uni = objNonCode.SJIS_To_VbUnicode(idat)
    End Select

    ' String(UNICODE)を出力したい文字コードのByte配列に変換
    Dim odat() As Byte
    cod = strOutCode
    Select Case cod
        Case "SJIS"
            ' UNICODEからSJISへの変換
            odat = objNonCode.VbUnicode_To_SJIS(uni)
        Case "JIS"
            ' UNICODEからJISへの変換
            odat = objNonCode.VbUnicode_To_JIS(uni)
        Case "EUC"
            ' UNICODEからEUCへの変換
            odat = objNonCode.VbUnicode_To_EUC(uni)
        Case "UNICODE"
            ' UNICODEからUNICODEへの変換
            odat = objNonCode.VbUnicode_To_UNICODE(uni)
        Case "UTF7"
            ' UNICODEからUTF7への変換
            odat = objNonCode.VbUnicode_To_UTF7(uni)
        Case "UTF8"
            ' UNICODEからUTF8への変換
            odat = objNonCode.VbUnicode_To_UTF8(uni)
        Case Else
            ' UNICODEからSJISへの変換
            odat = objNonCode.VbUnicode_To_SJIS(uni)
    End Select

    ' 出力ファイルをバイナリ形式で出力
    Dim opath As String: opath = App.Path & "\TestOut.txt"
    If Len(Dir(opath)) <> 0 Then
        Kill opath
    End If
    intFileNo = FreeFile
    Open opath For Binary As intFileNo
    Put intFileNo, , odat
    Close intFileNo
End Sub

<使用例(VB.NET)>
Public Class Form1
    Private objNonCode As New NonCodeNet.NonCodeClass  ' 文字コード判定/変換オブジェクト
    Private strOutCode As String                       ' 出力文字コード

    ' SJISへの変換
    Private Sub Button1_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        strOutCode = "SJIS"
        TextCodeChg()
    End Sub

    ' JISへの変換
    Private Sub Button2_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        strOutCode = "JIS"
        TextCodeChg()
    End Sub

    ' EUCへの変換
    Private Sub Button3_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        strOutCode = "EUC"
        TextCodeChg()
    End Sub

    ' UNICODEへの変換
    Private Sub Button4_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        strOutCode = "UNICODE"
        TextCodeChg()
    End Sub

    ' UTF7への変換
    Private Sub Button5_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        strOutCode = "UTF7"
        TextCodeChg()
    End Sub

    ' UTF8への変換
    Private Sub Button6_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        strOutCode = "UTF8"
        TextCodeChg()
    End Sub

    Private Sub TextCodeChg()
        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
            ' 入力ファイルをバイナリ形式で入力
            Dim AppPath As String = System.AppDomain.CurrentDomain.BaseDirectory
            sr = System.IO.File.Open(AppPath & "TestUtf8.txt", _
                System.IO.FileMode.Open, System.IO.FileAccess.Read)
            br = New System.IO.BinaryReader(sr)
            Dim dat() As Byte = New Byte(sr.Length - 1) {}
            dat = br.ReadBytes(sr.Length)

            ' 文字コード判定(blnBin=バイナリ判定無し)
            Dim cod As String = objNonCode.GetCodeName(dat, blnBin:=False)

            ' 判定した文字コードをString(UNICODE)に変換
            Dim uni As String
            Select Case cod
                Case "SJIS"
                    ' SJISからUNICODEへの変換
                    uni = objNonCode.SJIS_To_VbUnicode(dat)
                Case "JIS"
                    ' JISからUNICODEへの変換
                    uni = objNonCode.JIS_To_VbUnicode(dat)
                Case "EUC"
                    ' EUCからUNICODEへの変換
                    uni = objNonCode.EUC_To_VbUnicode(dat)
                Case "UNICODE"
                    ' UNICODEからUNICODEへの変換
                    uni = objNonCode.UNICODE_To_VbUnicode(dat)
                Case "UTF7"
                    ' UTF-7からUNICODEへの変換
                    uni = objNonCode.UTF7_To_VbUnicode(dat)
                Case "UTF8"
                    ' UTF-8からUNICODEへの変換
                    uni = objNonCode.UTF8_To_VbUnicode(dat)
                Case "BIN"
                    ' SJISからUNICODEへの変換
                    uni = objNonCode.SJIS_To_VbUnicode(dat)
                Case Else
                    ' SJISからUNICODEへの変換
                    uni = objNonCode.SJIS_To_VbUnicode(dat)
            End Select

            ' String(UNICODE)を出力したい文字コードのByte配列に変換
            cod = strOutCode
            Select Case cod
                Case "SJIS"
                    ' UNICODEからSJISへの変換
                    dat = objNonCode.VbUnicode_To_SJIS(uni)
                Case "JIS"
                    ' UNICODEからJISへの変換
                    dat = objNonCode.VbUnicode_To_JIS(uni)
                Case "EUC"
                    ' UNICODEからEUCへの変換
                    dat = objNonCode.VbUnicode_To_EUC(uni)
                Case "UNICODE"
                    ' UNICODEからUNICODEへの変換
                    dat = objNonCode.VbUnicode_To_UNICODE(uni)
                Case "UTF7"
                    ' UNICODEからUTF7への変換
                    dat = objNonCode.VbUnicode_To_UTF7(uni)
                Case "UTF8"
                    ' UNICODEからUTF8への変換
                    dat = objNonCode.VbUnicode_To_UTF8(uni)
                Case Else
                    ' UNICODEからSJISへの変換
                    dat = objNonCode.VbUnicode_To_SJIS(uni)
            End Select

            ' 出力ファイルをバイナリ形式で出力
            sw = System.IO.File.Open(AppPath & "TestOut.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 sr Is Nothing = False Then sr.Close()
            If bw Is Nothing = False Then bw.Close()
            If sw Is Nothing = False Then sw.Close()
        End Try
    End Sub
End Class

<使用例(C#.NET)>
namespace CsNetAp
{
    public partial class Form1 : Form
    {
        private NonCodeNet.NonCodeClass objNonCode = 
            new NonCodeNet.NonCodeClass();    // 文字コード判定/変換オブジェクト
        private String strOutCode;            // 出力文字コード

        public Form1()
        {
            InitializeComponent();
        }

        // SJISへの変換
        private void Button1_Click(object sender, EventArgs e)
        {
            strOutCode = "SJIS";
            TextCodeChg();
        }

        // JISへの変換
        private void Button2_Click(object sender, EventArgs e)
        {
            strOutCode = "JIS";
            TextCodeChg();
        }

        // EUCへの変換
        private void Button3_Click(object sender, EventArgs e)
        {
            strOutCode = "EUC";
            TextCodeChg();
        }

        // UNICODEへの変換
        private void Button4_Click(object sender, EventArgs e)
        {
            strOutCode = "UNICODE";
            TextCodeChg();
        }

        // UTF7への変換
        private void Button5_Click(object sender, EventArgs e)
        {
            strOutCode = "UTF7";
            TextCodeChg();
        }

        // UTF8への変換
        private void Button6_Click(object sender, EventArgs e)
        {
            strOutCode = "UTF8";
            TextCodeChg();
        }

        private void TextCodeChg()
        {
            System.IO.Stream sr = null;
            System.IO.Stream sw = null;
            System.IO.BinaryReader br = null;
            System.IO.BinaryWriter bw = null;
            try
            {
                // 入力ファイルをバイナリ形式で入力
                String AppPath = System.AppDomain.CurrentDomain.BaseDirectory;
                sr = System.IO.File.Open(AppPath + "TestUtf8.txt", 
                    System.IO.FileMode.Open, System.IO.FileAccess.Read);
                br = new System.IO.BinaryReader(sr);
                byte[] dat = new byte[sr.Length];
                br.Read(dat, 0, dat.Length);

                // 文字コード判定(blnBin=バイナリ判定無し)
                String cod = objNonCode.GetCodeName(ref dat, /*blnBin:=*/false);

                // 判定した文字コードをString(UNICODE)に変換
                String uni;
                switch(cod)
                {
                    case "SJIS":
                        // SJISからUNICODEへの変換
                        uni = objNonCode.SJIS_To_VbUnicode(ref dat);
                        break;
                    case "JIS":
                        // JISからUNICODEへの変換
                        uni = objNonCode.JIS_To_VbUnicode(ref dat);
                        break;
                    case "EUC":
                        // EUCからUNICODEへの変換
                        uni = objNonCode.EUC_To_VbUnicode(ref dat);
                        break;
                    case "UNICODE":
                        // UNICODEからUNICODEへの変換
                        uni = objNonCode.UNICODE_To_VbUnicode(ref dat);
                        break;
                    case "UTF7":
                        // UTF-7からUNICODEへの変換
                        uni = objNonCode.UTF7_To_VbUnicode(ref dat);
                        break;
                    case "UTF8":
                        // UTF-8からUNICODEへの変換
                        uni = objNonCode.UTF8_To_VbUnicode(ref dat);
                        break;
                    case "BIN":
                        // SJISからUNICODEへの変換
                        uni = objNonCode.SJIS_To_VbUnicode(ref dat);
                        break;
                    default:
                        // SJISからUNICODEへの変換
                        uni = objNonCode.SJIS_To_VbUnicode(ref dat);
                        break;
                }

                // String(UNICODE)を出力したい文字コードのByte配列に変換
                cod = strOutCode;
                switch(cod)
                {
                    case "SJIS":
                        // SJISからUNICODEへの変換
                        dat = objNonCode.VbUnicode_To_SJIS(uni);
                        break;
                    case "JIS":
                        // JISからUNICODEへの変換
                        dat = objNonCode.VbUnicode_To_JIS(uni);
                        break;
                    case "EUC":
                        // EUCからUNICODEへの変換
                        dat = objNonCode.VbUnicode_To_EUC(uni);
                        break;
                    case "UNICODE":
                        // UNICODEからUNICODEへの変換
                        dat = objNonCode.VbUnicode_To_UNICODE(uni, false);
                        break;
                    case "UTF7":
                        // UTF-7からUNICODEへの変換
                        dat = objNonCode.VbUnicode_To_UTF7(uni);
                        break;
                    case "UTF8":
                        // UTF-8からUNICODEへの変換
                        dat = objNonCode.VbUnicode_To_UTF8(uni, false);
                        break;
                    default:
                        // SJISからUNICODEへの変換
                        dat = objNonCode.VbUnicode_To_SJIS(uni);
                        break;
                }

                // 出力ファイルをバイナリ形式で出力
                sw = System.IO.File.Open(AppPath + "TestOut.txt", 
                    System.IO.FileMode.Create, System.IO.FileAccess.Write);
                bw = new System.IO.BinaryWriter(sw);
                bw.Write(dat);
            }
            catch(Exception  ex)
            {
                throw ex;
            }
            finally
            {
                // ファイルのクローズ
                if (br != null) br.Close();
                if (sr != null) sr.Close();
                if (bw != null) bw.Close();
                if (sw != null) sw.Close();
            }
        }
    }
}

<使用例(VBS)>
' ------------------------------------------------
' 事前にNonCodeVb6.dllをレジストリ登録してください
' レジストリ登録方法:regsvr32 NonCodeVb6.dll
' ------------------------------------------------
' 文字コード判定/変換AP呼び出し
TextCodeChg "TestUtf8.txt", "TestOut1.txt", "SJIS"
TextCodeChg "TestUtf8.txt", "TestOut2.txt", "JIS"
TextCodeChg "TestUtf8.txt", "TestOut3.txt", "EUC"
TextCodeChg "TestUtf8.txt", "TestOut4.txt", "UNICODE"
TextCodeChg "TestUtf8.txt", "TestOut5.txt", "UTF7"
TextCodeChg "TestUtf8.txt", "TestOut6.txt", "UTF8"

MsgBox "終了"

' 文字コード判定/変換AP
Private Sub TextCodeChg(Byval ipath, Byval opath, Byval ocode)
    ' NonCodeVb6.dllのオブジェクト生成
    Set objNonCode = CreateObject("NonCodeVb6.NonCodeClassV")

    ' テキストをバイト配列で読込
    Set objADOS = CreateObject("ADODB.Stream")
    objADOS.Type = 1
    objADOS.Open
    objADOS.LoadFromFile ipath
    objADOS.Position = 0
    idat = objADOS.Read()
    objADOS.Close
            
    ' 文字コード判定(blnBin=バイナリ判定無し)
    blnBin = False
    icode = objNonCode.GetCodeName(idat, blnBin)

    ' 判定した文字コードをString(UNICODE)に変換
    Dim uni
    Select Case icode
        Case "SJIS"
            ' SJISからUNICODEへの変換
            uni = objNonCode.SJIS_To_VbUnicode(idat)
        Case "JIS"
            ' JISからUNICODEへの変換
            uni = objNonCode.JIS_To_VbUnicode(idat)
        Case "EUC"
            ' EUCからUNICODEへの変換
            uni = objNonCode.EUC_To_VbUnicode(idat)
        Case "UNICODE"
            ' UNICODEからUNICODEへの変換
            uni = objNonCode.UNICODE_To_VbUnicode(idat)
        Case "UTF7"
            ' UTF-7からUNICODEへの変換
            uni = objNonCode.UTF7_To_VbUnicode(idat)
        Case "UTF8"
            ' UTF-8からUNICODEへの変換
            uni = objNonCode.UTF8_To_VbUnicode(idat)
        Case "BIN"
            ' SJISからUNICODEへの変換
            uni = objNonCode.SJIS_To_VbUnicode(idat)
        Case Else
            ' SJISからUNICODEへの変換
            uni = objNonCode.SJIS_To_VbUnicode(idat)
    End Select

    ' String(UNICODE)を出力したい文字コードのByte配列に変換
    Dim odat
    Select Case ocode
        Case "SJIS"
            ' UNICODEからSJISへの変換
            odat = objNonCode.VbUnicode_To_SJIS(uni)
        Case "JIS"
            ' UNICODEからJISへの変換
            odat = objNonCode.VbUnicode_To_JIS(uni)
        Case "EUC"
            ' UNICODEからEUCへの変換
            odat = objNonCode.VbUnicode_To_EUC(uni)
        Case "UNICODE"
            ' UNICODEからUNICODEへの変換
            odat = objNonCode.VbUnicode_To_UNICODE(uni)
        Case "UTF7"
            ' UNICODEからUTF7への変換
            odat = objNonCode.VbUnicode_To_UTF7(uni)
        Case "UTF8"
            ' UNICODEからUTF8への変換
            odat = objNonCode.VbUnicode_To_UTF8(uni)
        Case Else
            ' UNICODEからSJISへの変換
            odat = objNonCode.VbUnicode_To_SJIS(uni)
    End Select

    ' 出力ファイルをバイナリ形式で出力
    objADOS.Type = 1
    objADOS.Open
    objADOS.Write odat
    objADOS.SaveToFile opath, 2
    objADOS.Close
End Sub