DOBON.NET DOBON.NETプログラミング掲示板過去ログ

CSVファイル出力の文字化けについて

環境/言語:[WinXP C#.NET(2005) FrameWork2.0]
分類:[.NET]

お世話になっております。

【やりたいこと】
MDBから読み込んだデータをCSVファイルにして出力したい。

【問題点】
出力されたファイルを、メモ帳で確認すると望んだように出力されているのですが、
ダブルクリックでエクセルで開くと、日本語が文字化けしている。

【対応】
UniCode←→Shift-JISの問題かと思い、エンコード用のクラスを作成し、コード変換をしてみたのですが、結果は同じでした。



以下にコードを添付しますので、何がいけないのか、何が足りないのか、おわかりになる方がいらっしゃったらお教えください。よろしくお願いいたします。

---------------------------------------------------------------------------


//エクスポートファイルの取得
System.IO.FileStream fs = null;
System.IO.StreamWriter writer = null;

fs = System.IO.File.Open(strFilePath, System.IO.FileMode.Create);
writer = new System.IO.StreamWriter(fs);
string k=@""""; //区切り文字列

//データビューの読み込み
for (int i = 0; i < view.Count ; i++)
{

//DataRowViewの作成
DataRowView row = view[i];


//書き込み文字列作成
string str = "";
str = k + row["Key"].ToString() + k + ","
+ k + row["Code"].ToString() + k + ","
+ k + row["Name"].ToString().Trim() + k ;

// 1 行書き込み
ClsEncording cle = new ClsEncording();
writer.WriteLine(cle.ConvertToShiftJis(str));
}




//ClsEncordingクラス メソッド///////
public string ConvertToShiftJis(string str){
Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
byte[] bytes = sjisEnc.GetBytes(str);

string strResult = sjisEnc.GetString(bytes);
return strResult;
}
■No15629に返信(JUNさんの記事)
> 【対応】
> UniCode←→Shift-JISの問題かと思い、エンコード用のクラスを作成し、コード変換をしてみたのですが、結果は同じでした。

 これでは意味がありません......
 Stream 自体の エンコーディングを設定しましょう。

..............................................................................................................................
じゃんぬ @ わんくま同盟, Microsoft MVP for Visual Developer - C#
 http://jeanne.wankuma.com/
 http://blogs.wankuma.com/jeanne/
StreamWriter の、Stream 一つを引数に取るコンストラクタの解説をよく読んでください。
http://msdn2.microsoft.com/ja-jp/library/wtbhzte9(VS.80).aspx
他のコンストラクタの引数も確認すると吉です。


> UniCode←→Shift-JISの問題かと思い、エンコード用のクラスを作成し、コード変換をしてみたのですが、結果は同じでした。
(略)
> public string ConvertToShiftJis(string str){
> Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
> byte[] bytes = sjisEnc.GetBytes(str);
>
> string strResult = sjisEnc.GetString(bytes);
> return strResult;
> }

これは何の意味もないコードですね。
.NET では文字列は文字列です。文字列を Shift_jis で表現した場合のバイト列にして、そのバイト列を Shift_jis として文字列に変換する。
ほら元通り。
じゃんぬねっとさん、Hongliangさん、アドバイスありがとうございました。

これで昨日深夜まで悩んでいた問題が解決いたしました。

以下のコードでうまくいきました。


System.Text.Encoding sjisEnc = System.Text.Encoding.GetEncoding("Shift_JIS");

System.IO.FileStream fs = null;
System.IO.StreamWriter writer = null;

fs = System.IO.File.Open(strFilePath, System.IO.FileMode.Create);
writer = new System.IO.StreamWriter(fs,sjisEnc);


よかった(*^-^*)
感謝いたします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板