【C#】ファイル書き込みをShift_JISで行う。
2008-12-31


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が変わりに行ってくれた……のかな。

[プログラム]
[落書き]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット