|
|||||
文字コード判定(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 |