|
|||||
<このサンプルの概要> 文字コードを自動判定(判別と言うべきか?)して指定の文字コードに変換するサンプルです。 文字コードの変換にはC#.NETのSystem.Text.Encodingを使用しています。 文字コードの判定には文字コード判定のサンプル(VB6/VB.NET)を使用しています。 C#.NETではSystem.Text.Encodingを使用する事で簡単に文字コードの変換が出来るようです。 手順は以下の通りです。 (1)入力ファイルをバイナリ形式で入力 (2)文字コード判定 (3)判定した文字コードをString(UNICODE)に変換 (4)String(UNICODE)を出力したい文字コードのByte配列に変換 (5)出力ファイルをバイナリ形式で出力 (6)ファイルのクローズ もっと簡単に文字コード変換を実現したい場合はこちらのDLLがおすすめです。 文字コード判定/変換DLL(VB6/VB.NET/C#.NET) VB.NET版はこちらです。 文字コードを判定して指定の文字コードに変換するサンプル(VB.NET) 関連情報 ADODB.Streamによる文字コード変換のサンプル(VB6/VB.NET) WideCharToMultiByteとMultiByteToWideCharによる文字コード変換のサンプル(VB6/VB.NET) 文字コード判定&変換ツール.NET 文字コード判定/変換ツール(VB6のソース付) ★フォームモジュール(Form1.cs) private void button1_Click(object sender, EventArgs e) { Byte[] dat = new Byte[] { }; System.IO.Stream sr = null; System.IO.Stream sw = null; System.IO.BinaryReader br = null; System.IO.BinaryWriter bw = null; try { // 入力ファイルをバイナリ形式で入力 sr = System.IO.File.Open("test1.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read); br = new System.IO.BinaryReader(sr); Array.Resize<Byte>(ref dat, (int)sr.Length); dat = br.ReadBytes((int)sr.Length); br.Close(); sr.Close(); // 文字コード判定 String cod = JudgeCode(dat); // 判定した文字コードをString(UNICODE)に変換 String uni; if (cod == "JIS") { // JISからUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("ISO-2022-JP").GetString(dat); } else if (cod == "EUC") { // EUCからUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("EUC-JP").GetString(dat); } else if (cod == "UNICODE") { // UNICODEからUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("UNICODE").GetString(dat); } else if (cod == "UTF7") { // UTF-7からUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("UTF-7").GetString(dat); } else if (cod == "UTF8") { // UTF-8からUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("UTF-8").GetString(dat); } else { // SJISからUNICODEへの変換 uni = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(dat); } // String(UNICODE)を出力したい文字コードのByte配列に変換 cod = "EUC"; if (cod == "JIS") { // UNICODEからJISへの変換 dat = System.Text.Encoding.GetEncoding("ISO-2022-JP").GetBytes(uni); } else if (cod == "EUC") { // UNICODEからEUCへの変換 dat = System.Text.Encoding.GetEncoding("EUC-JP").GetBytes(uni); } else if (cod == "UNICODE") { // UNICODEからUNICODEへの変換 dat = System.Text.Encoding.GetEncoding("UNICODE").GetBytes(uni); } else if (cod == "UTF7") { // UNICODEからUTF7への変換 dat = System.Text.Encoding.GetEncoding("UTF-7").GetBytes(uni); } else if (cod == "UTF8") { // UNICODEからUTF8への変換 dat = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(uni); } else { // UNICODEからSJISへの変換 dat = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes(uni); } // 出力ファイルをバイナリ形式で出力 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 (Exception ex) { throw ex; } finally { // ファイルのクローズ if (br != null) br.Close(); if (bw != null) bw.Close(); if (sr != null) sr.Close(); if (sw != null) sw.Close(); } } |