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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.64941 の関連記事表示

<< 0 >>
■64941  Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ いちば -(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を書き込んでいます。
    この時に英数字はちゃんと書き込まれるのですが、日本語が文字化けしてしまいます。
    何が悪いのでしょうか。
親記事 /過去ログ109より / 関連記事表示
削除チェック/

■64942  Re[1]: Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ Hongliang -(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[]を直接書き込めば良いような気がしますけど。
記事No.64941 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64943  Re[2]: Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ いちば -(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);

    これを保存ダイアログで獲得したファイル名、保存場所でファイルを保存できるようにするにはどうしたらいいでしょうか?
記事No.64941 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64944  Re[1]: Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ shu -(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)
    を行えば良いとおもいます。
記事No.64941 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64945  Re[1]: Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ 魔界の仮面弁士 -(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);
     }
    }

    で良いかと思います。
記事No.64941 のレス /過去ログ109より / 関連記事表示
削除チェック/

■64959  Re[2]: Visual C#を用いたファイルへの書き込み時の文字化け
□投稿者/ いちば -(2013/01/25(Fri) 08:37:20)
    shuさん魔界の仮面弁士さんありがとうございます。
    おかげで無事文字化けせずに保存できるようになりました
記事No.64941 のレス / END /過去ログ109より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -