C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Visual C#を用いたファイルへの書き込み時の文字化け


(過去ログ 109 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■64941 / inTopicNo.1)  Visual C#を用いたファイルへの書き込み時の文字化け
  
□投稿者/ いちば (3回)-(2013/01/24(Thu) 11:08:08)

分類:[C#] 

visual C#を用いてバイト配列に格納したものをshift-jisに変換してファイルへ書き込もうとしています。
data[1000]の中に英数、日本語を格納しており

string str = System.Text.Encoding.GetEncoding(932).GetString(data, 0, length);

でstrへshift-jis変換をしております。
その後
//保存ダイアログを表示
    SaveFileDialog dlg = new SaveFileDialog();
    dlg.Filter = "TXT形式(*.txt)|*.txt|すべてのファイル(*.*)|*.*";
    if (dlg.ShowDialog() == DialogResult.OK) {
     System.IO.Stream stream;
    stream = dlg.OpenFile();
        if (stream != null) {
//ファイルに書き込む
System.IO.StreamWriter sw = new System.IO.StreamWriter(stream);
sw.Write(str);
//閉じる
sw.Close();
stream.Close();
}
}

というように保存ダイアログを開きファイル名を指定してstrを書き込んでいます。
この時に英数字はちゃんと書き込まれるのですが、日本語が文字化けしてしまいます。
何が悪いのでしょうか。
引用返信 編集キー/
■64942 / inTopicNo.2)  Re[1]: Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ Hongliang (34回)-(2013/01/24(Thu) 11:13:57)
http://msdn.microsoft.com/ja-jp/library/wtbhzte9.aspx
StreamWriter(Stream)コンストラクタを使った場合、UTF-8が使用されます。
エンコーディングを明示したいなら、Encodingを渡すコンストラクタを使用してください。

// 変換後のをいじる必要がないのなら、いちいち文字列変換→StreamWriter.Writeせず、FileStreamにbyte[]を直接書き込めば良いような気がしますけど。
引用返信 編集キー/
■64943 / inTopicNo.3)  Re[2]: Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ いちば (4回)-(2013/01/24(Thu) 11:44:49)
Hongliangさんありがとうございます。

> // 変換後のをいじる必要がないのなら、いちいち文字列変換→StreamWriter.Writeせず、FileStreamにbyte[]を直接書き込めば良いような気がしますけど。

この方法を試してみようと思うのですが次のような、ファイル名、保存場所を指定して保存する方法しか見つけることができませんでした
System.IO.FileStream fs = new System.IO.FileStream(@"C:\test.txt",System.IO.FileMode.Create,System.IO.FileAccess.Write);

これを保存ダイアログで獲得したファイル名、保存場所でファイルを保存できるようにするにはどうしたらいいでしょうか?
引用返信 編集キー/
■64944 / inTopicNo.4)  Re[1]: Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ shu (145回)-(2013/01/24(Thu) 11:53:32)
No64941 (いちば さん) に返信

> visual C#を用いてバイト配列に格納したものをshift-jisに変換してファイルへ書き込もうとしています。
> data[1000]の中に英数、日本語を格納しており
>
> string str = System.Text.Encoding.GetEncoding(932).GetString(data, 0, length);
>
> でstrへshift-jis変換をしております。
Shift-JISでエンコードされたバイト列を文字列に変換しているのであってShift-JISに変換しているわけではありません。


やりたいことを実現するには
stream.Write(data,0,length)
を行えば良いとおもいます。
引用返信 編集キー/
■64945 / inTopicNo.5)  Re[1]: Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ 魔界の仮面弁士 (126回)-(2013/01/24(Thu) 12:43:15)
No64941 (いちば さん) に返信
> visual C#を用いてバイト配列に格納したものをshift-jisに変換してファイルへ書き込もうとしています。
> data[1000]の中に英数、日本語を格納しており

data[] 内のバイナリが、すでに Shift_JIS 相当のものであるならば

using( SaveFileDialog dlg = new SaveFileDialog() )
{
 dlg.Filter = "TXT形式(*.txt)|*.txt|すべてのファイル(*.*)|*.*";
 if (dlg.ShowDialog() == DialogResult.OK)
 {
 System.IO.File.WriteAllBytes(dlg.FileName, data);
 }
}

で良いかと思います。
引用返信 編集キー/
■64959 / inTopicNo.6)  Re[2]: Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ いちば (5回)-(2013/01/25(Fri) 08:37:20)
shuさん魔界の仮面弁士さんありがとうございます。
おかげで無事文字化けせずに保存できるようになりました
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -