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

8bit Shift-JISメールの表示

環境/言語:[XP/C#]
分類:[.NET]

初めて書き込みさせて頂きます。宜しくお願い致します。

メールを1通だけ受信し、本文を一行ずつArrayListに追加しています。
listboxで表示させる場合、

Content-type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

のメールであれば、
byte[] bytes = Encoding.ASCII.GetBytes(mail_body_str);
mailbody = Encoding.GetEncoding("iso-2022-jp").GetString(bytes);
で化けずに表示されるのですが、

Content-Type: text/plain;charset=SHIFT_JIS
Content-Transfer-Encoding: 8bit

のメールの場合のデコード方法がわかりません。。。
mailbody = Encoding.GetEncoding("shift-jis").GetString(bytes);
では化けてしまいます。。。

パケットキャプチャして見てみたのですが、
\202\240\212\277\216\232\r\nのようにreceiveしていたので、
SHIFT-JISであるのは分かるのですが。。。
アドバイスを頂ければ幸いです。
宜しくお願い致します。
■No24338に返信(松田さんの記事)
> \202\240\212\277\216\232\r\nのようにreceiveしていたので、
> SHIFT-JISであるのは分かるのですが。。。
その結果は、本来、どのような文字列になるものですか?

上記の[\nnn]が、1 バイトの10進数を表しているのかと思ったのですが、
277 は byte では無いですよね。どのように読めばよろしいのでしょうか?

byte[] bytes = { 202, 240, 212, 277, 216, 232, (byte)'\r', (byte)'\n' };
> その結果は、本来、どのような文字列になるものですか?

IMAPのレスポンスをWiresharkでキャプチャしたもので、
\202\253\202\345\202\244\202\315\201c\r\n
"きょうは…"という文字列になるはずです。

16進数では、82 ab 82 e5 82 a4 82 cd 81 63 0d 0a
となっています。
表示することができました...勉強不足です。
申し訳ございませんでした。

StreamReader(tcp_client.GetStream());
から
StreamReader(network_stream, Encoding.GetEncoding("SHIFT-JIS"));
エンコーディング指定して読み出しました。
解決済み!

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