• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C# 文字コード変換)

C#文字コード変換で文字列をShift-JISで書き出す方法

このQ&Aのポイント
  • C#でプログラムを開発している際に、文字列をShift-JISでテキストファイルに書き出す方法について教えてください。
  • 指定したコードで書き出すようにしているのに、実際にはUTF-8で書き出されてしまう原因がわかりません。
  • 文字コードを判別するツールを使用しても、正しい文字コードが指定されていることが確認できます。どの部分に間違いがあるのか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

せっかくStreamWriter使っているのですから,Writeにそのまま文字列を渡せば良いのでは。

pokeman-v
質問者

お礼

ご回答ありがとうございます。 後半の文が余計でした。 文字コードの判別方法についてもう一度考え直します。 ありがとうございました。

pokeman-v
質問者

補足

説明不足でした。 失礼しました。 もともと以下の部分はコードとして書いていなかったものです。     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ではないので、解決はしてないんですが。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.5

>>こちらでやってみると >どのように確認されたんでしょうか。 VC#2010EEでフォームアプリケーションで新規プロジェクト「qa8057608」を作成。 Form1上にボタンを配置して、Clickイベントハンドラに掲示されているコードをそのままコピペで貼ってビルド。 実行して[Button1]をクリック。 出力されたC:\hoge.DMDを秀丸で文字コード自動判別で読み込ませて、判定された文字コードを確認しただけです。 ついでにファイルサイズも確認してますが。 # "テキストへ書き込む内容"をUTF-8(BOMなし)で保存すると33バイトになります。

すると、全ての回答が全文表示されます。
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

>UTF-8で書き出されておりましたので、明示的に変換してみた。 という形になります。 stringの内部の文字コードはunicodeですから、stringに戻してる時点で意味がありません。

すると、全ての回答が全文表示されます。
回答No.3

ISO-8859-2である,というのはどのようにして確認したのでしょうか。 基本的に,Shift_JISで利用する文字集合の範囲とISO-8859-2で利用する文字集合の範囲は, ISO 646部分を除くとほとんど重複しません。 そして,ISO/IEC 8859の各パートで定義されるのは96文字からなる文字集合であるため, 0x00 - 0xFFのすべての数値が各オクテットに出てくる可能性があります。 このため,自動判別でISO-8859-2になった,というのであれば,根拠になり得ません。 もう一度,ちゃんと確認すべきかと思います。 「<文字> (<U+xxxx>) をオクテット列に書き出したら<0xYY 0xZZ>になったから<文字コード>>として出力されたと認識した」 上記が文章が特定の文字コードである理由を述べるための基本的なフォーマットです。 上記の<>で囲まれた部分を対象に合わせて置き換えて,ISO-8859-2である理由を提示してみて下さい。

すると、全ての回答が全文表示されます。
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

#1さんの書かれているとおりですが……。 GetBytes()とかGetString()とか必要ですか? あと…… >以下のように指定しても文字コードがUTF-8で書き出されているようです。 どのように確認されました? こちらでやってみると、普通にShiftJISで出力(22バイト)されていましたけど…。

pokeman-v
質問者

補足

>どのように確認されました? 質問文に記載しておりますURLで テキストのコピーを貼り付けて「実行」ボタンのクリックです。 また、ファイルの選択から ファイルを選択して、「実行」ボタンのクリックです。 >こちらでやってみると どのように確認されたんでしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A