※ ChatGPTを利用し、要約された質問です(原文:C# 文字コード変換)
C#文字コード変換で文字列をShift-JISで書き出す方法
このQ&Aのポイント
C#でプログラムを開発している際に、文字列をShift-JISでテキストファイルに書き出す方法について教えてください。
指定したコードで書き出すようにしているのに、実際にはUTF-8で書き出されてしまう原因がわかりません。
文字コードを判別するツールを使用しても、正しい文字コードが指定されていることが確認できます。どの部分に間違いがあるのか教えてください。
お世話になります。
宜しくお願いします。
C#でプログラムを開発しております。
その中で、文字列をShift-JISでテキストファイルへ書き出す
という処理があるんですが
以下のように指定しても文字コードがUTF-8で書き出されているようです。
コードを調べましたが間違いが見つけられません。
どこか間違いはございますでしょうか。
ご教授宜しくお願いします。
・文字コードを判別する場所 : http://encode-detector.uic.jp/tool
・テキストの形式 :ファイル名.DMD
/////////////// 以下コード /////////////////////////
String param = "テキストへ書き込む内容";
System.IO.StreamWriter sw =
new System.IO.StreamWriter(
@"C:\hoge.DMD",
false,
System.Text.Encoding.GetEncoding("Shift_JIS") );
System.Text.Encoding src = System.Text.Encoding.UTF8;
System.Text.Encoding dest = System.Text.Encoding.GetEncoding("Shift_JIS");
byte[] temp = src.GetBytes(param);
byte[] sjis_temp = System.Text.Encoding.Convert(src, dest, temp);
param = dest.GetString(sjis_temp);
sw.Write(param);
sw.Close();
お礼
ご回答ありがとうございます。 後半の文が余計でした。 文字コードの判別方法についてもう一度考え直します。 ありがとうございました。
補足
説明不足でした。 失礼しました。 もともと以下の部分はコードとして書いていなかったものです。 System.Text.Encoding src = System.Text.Encoding.UTF8; System.Text.Encoding dest = System.Text.Encoding.GetEncoding("Shift_JIS"); byte[] temp = src.GetBytes(param); byte[] sjis_temp = System.Text.Encoding.Convert(src, dest, temp); param = dest.GetString(sjis_temp); 以前はおっしゃる通り、StreamWriterにそのままparamを渡していたのですが UTF-8で書き出されておりましたので、明示的に変換してみた。 という形になります。 先ほど指摘頂いた通り、上記の無駄な処理を省いて StreamWriterにparamを渡して実行したところ UTF-8で書き出されておらず 中央ヨーロッパ言語 (ISO) - iso-8859-2 で書き出されておりました。 どの道Shift-JISではないので、解決はしてないんですが。