【C#】ファイル書き込みをShift_JISで行う。 ― 2008年12月31日 15時34分
C#のstring型は内部的にUnicodeで値を持っているみたいなので、文字列をのまま書き込んでしまうとファイルにはUnicodeとかで書き込む事になります。Shift_JISとかで書き込む際には、ちょっとした指定が要るみたいです。
1: public stdStreamIO(Encoding encode) 2: { 3: // 文字コード指定 4: ec = encode; 5: } 6: 7: public int writingFile(string fpath, string str) 8: { 9: // 宣言 10: int ret = -1; 11: FileStream fs; 12: StreamWriter sw; 13: 14: try 15: { 16: // 初期化 17: fs = new FileStream(fpath, FileMode.Create); 18: sw = new StreamWriter(fs, ec); 19: 20: // 書き込み 21: sw.WriteLine(str); 22: sw.Flush(); 23: 24: // 後処理 25: sw.Close(); 26: fs.Close(); 27: 28: // 戻り値 29: ret = 0; 30: } 31: catch (Exception e) 32: { 33: Console.WriteLine(e.StackTrace); 34: } 35: 36: return ret; 37: }
Shift_JISコードを使うなら引数を渡す時に、Encoding.GetEncoding(932)を指定すると良いみたいです。書き込むだけなら18行目のecのところを変えるだけでも行けそうですけどね。
ただShift_JISに書き込んだ後、再び開いて編集→書き込みとかする時は色々注意が必要そうです。最初一連の流れでそれやってたら、日本語のところだけが文字化けしてて、解決するまでに3日も費やしてしまいました。
このコードで本当に正しいかどうかという問題は不明。とりあえず、他テキストエディタで見るとShift_JISに変換されている、というだけですし。最初はbyte[]型に文字列を格納してって、試行錯誤してましたが。その面倒な変換は、StreamWriterが変わりに行ってくれた……のかな。
コメント
トラックバック
このエントリのトラックバックURL: http://cslav.asablo.jp/blog/2008/12/31/4036602/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。