C#: テキストファイルの読み書き
Node.js に関連して C# のはじめの一歩の話です。
Node.js ではテキストファイルの文字コードは utf-8 しか扱わないので、 シフト JIS ファイルとの変換が必要になったら眺めてください。
Windows には C# のコンパイラが標準で付属しています
シフトJIS → UTF-8 に変換
下は C# のプログラムです。ファイル名 sjis2utf8.cs で保存して下さい。
/* 2014/06-2015/06 シフトJIS→UTF8 に変換 ファイル名:sjis2utf8.cs コンパイル: csc sjis2utf8.cs デバッグ用のコンパイル: csc /debug+ sjis2utf8.cs 実行: sjis2utf8 (src) (dst) 例: sjis2utf8 sjis.txt utf8.txt */ using System; using System.IO; using System.Text; class Program { static Encoding SHIFT_JIS = Encoding.GetEncoding("Shift_JIS"); static Encoding UTF8 = Encoding.GetEncoding("utf-8"); static void Main(string[] args){ try{ string src = args[0]; string dst = args[1]; string text = File.ReadAllText(src, SHIFT_JIS); File.WriteAllText(dst, text, UTF8); } catch(Exception e){ //Console.WriteLine(e.ToString()); Console.WriteLine(e.Message); Console.WriteLine("使い方\nsjis2utf8 (src) (dst)\n src:シフトJISファイルのパス\n dst:UTF-8ファイルのパス"); } } }
コンパイルと実行 (Windows10 の場合)
下は2020年頃の Windows10 の例です。 C# のコンパイラ (csc.exe) があるフォルダは Windowsのバージョンによって変わるかもしれないので、 C:\Windows 以下のフォルダを眺めて確認して下さい。
1) コンパイラ (csc.exe) へのパスを通す。 path=%path%;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319 パスを通す話は プロンプト:アプリケーションを起動する・その2 も参照ください。 2) ソースをコンパイルする。 csc sjis2utf8.cs 参考:デバッグメッセージを表示するときのコンパイル csc /debug+ sjis2utf8.cs e.ToString() などでエラーが発生したソースの行位置を知りたい場合には /debug+ を付けてコンパイルします。プログラムをデバッグ中のときには こちらを使用します。 コンパイルに成功すると、sjis2utf8.exe が作成されます。 3) プログラムを実行する。 sjis2utf8 (シフトJISファイルのパス) (UTF-8ファイルのパス)
実行例
シフト JIS のテキストファイル sjis.txt を用意します。 以下、Windows10 でコンパイルと実行を行った例です。 UTF8 のテキストファイル utf8.txt が作成されます。
UTF-8 → シフトJIS の変換
上のソースの File.ReadAllText と File.WriteAllText の SHIFT_JIS と UTF8 を逆にします。 別のファイル名(例えば uft2sjis.cs など) でソースを保存してコンパイルしてください。
XML ファイルの書式をチェックするサンプル
XML ファイルを読んで、 書式に誤りがあれば行・カラムのエラー位置を エラーメッセージで表示します。 XML の書式で書かれた HTML5 のファイルでも使えます。
/* 2009,2014/07/09 ・XMLファイルを読む XMLの記述に誤りがあるとエラーメッセージを表示する。 */ using System; using System.Xml; public class Program { public static void Main(string[] args) { string path = null; try{ path = args[0]; XmlDocument doc = new XmlDocument(); using(XmlTextReader r = new XmlTextReader(path)){ r.XmlResolver = null; //DTD検証を無効にする。 doc.Load(r); } //using を抜けるときに close される。 Console.WriteLine("正常:"+path); } catch(Exception e){ Console.WriteLine("エラー:"+path+"\r\n"+e.Message); } } } /* ・ファイル名:TestXMLRead01.cs ・コンパイル csc TestXMLRead01.cs csc /debug+ TestXMLRead01.cs ・実行 TestXMLRead01 (ファイル名) TestXMLRead01 sample.xml ◎参考 ・下でも同じ string xml = File.ReadAllText(path); XmlDocument doc = new XmlDocument(); doc.XmlResolver = null; //DTD の検証を無効にする doc.LoadXml(xml); //XMLを読む ・単純に下の処理だとまずい。 XmlDocument doc = new XmlDocument(); doc.Load(path); //XMLファイルを読む XHTML など DOCTYPE に DTD の URL があると、dtd をダウンロード して検証しようとする。 XHTML の場合は www.w3c.org から DTD をダウンロードしようとする。 */
関連
C#: XML/XHTML チェックツール
XML の書式チェックや XHTML の DTD 検証を行うツールです。 上のサンプルプログラムに GUI をつけて ファイルのドラッグ&ドロップで処理できるようにしたものです。 C# のプログラムでソースも付けてあります。
XML の書式チェックや XHTML の DTD 検証を行うツールです。 上のサンプルプログラムに GUI をつけて ファイルのドラッグ&ドロップで処理できるようにしたものです。 C# のプログラムでソースも付けてあります。