お世話になります。
宜しくお願いします。
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();
No.1ベストアンサー
- 回答日時:
せっかくStreamWriter使っているのですから,Writeにそのまま文字列を渡せば良いのでは。
この回答への補足
説明不足でした。
失礼しました。
もともと以下の部分はコードとして書いていなかったものです。
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ではないので、解決はしてないんですが。
ご回答ありがとうございます。
後半の文が余計でした。
文字コードの判別方法についてもう一度考え直します。
ありがとうございました。
No.5
- 回答日時:
>>こちらでやってみると
>どのように確認されたんでしょうか。
VC#2010EEでフォームアプリケーションで新規プロジェクト「qa8057608」を作成。
Form1上にボタンを配置して、Clickイベントハンドラに掲示されているコードをそのままコピペで貼ってビルド。
実行して[Button1]をクリック。
出力されたC:\hoge.DMDを秀丸で文字コード自動判別で読み込ませて、判定された文字コードを確認しただけです。
ついでにファイルサイズも確認してますが。
# "テキストへ書き込む内容"をUTF-8(BOMなし)で保存すると33バイトになります。
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である理由を提示してみて下さい。
No.2
- 回答日時:
#1さんの書かれているとおりですが……。
GetBytes()とかGetString()とか必要ですか?
あと……
>以下のように指定しても文字コードがUTF-8で書き出されているようです。
どのように確認されました?
こちらでやってみると、普通にShiftJISで出力(22バイト)されていましたけど…。
この回答への補足
>どのように確認されました?
質問文に記載しておりますURLで
テキストのコピーを貼り付けて「実行」ボタンのクリックです。
また、ファイルの選択から
ファイルを選択して、「実行」ボタンのクリックです。
>こちらでやってみると
どのように確認されたんでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- その他(プログラミング・Web制作) pythonのpandasのcsvの外部結合(outer_join)した際に列が想定とは異なる事象 1 2022/05/25 13:23
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
Excel VBAが徐々に遅くなる
-
バイナリファイルの区別
-
既存のテキストファイルを開く方法
-
テキストファイル内容の、16進...
-
エクセルのマクロについて教え...
-
バイナリコードの入っている行...
-
パイソンでのテキストデータの...
-
COBOL サイン(符号)無しパッ...
-
UTF-8とASCIIコードにおける互...
-
N88Basic
-
テキストファイル内の文字の有...
-
テキストファイルの中身をコピ...
-
My.Resourcesにあるテキストフ...
-
テキストファイルの表示
-
テキストファイルの一部分を抽...
-
ファイル変換
-
STM32 Nucleo-F446REでデータを...
-
【Excel VBA】取り込んだファイ...
-
accessでクエリをExcelにエクス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
Excel VBAが徐々に遅くなる
-
テキストファイルの一部分を抽...
-
既存のテキストファイルを開く方法
-
StreamReaderで読み込んだファ...
-
テキストファイルってページの...
-
WORDのVBAで差し込み印刷時、デ...
-
[VB.NET] 処理の高速化を行いた...
-
UTF-8とASCIIコードにおける互...
-
テキストファイルの特定行の削...
-
テキストファイル固定長データ...
-
VBA。開いているテキストファイ...
-
VB(VBA)で、バイナリデータを使...
-
C言語のソースからコメントを抜...
-
テキストファイルをSQLServerデ...
-
ファイル変換
-
テキストデータ変換(プログラ...
-
バイナリデータの中からMidのよ...
-
ExcelのVBAコードについて教え...
-
テキストファイル内容の、16進...
おすすめ情報