あなたの上記のMIMEスニペットを持ついくつかの問題があります:(それは(MimeKitはまさにこの理由のため7bit
と8bit
の値を無視します)問題になりそうではありませんaltho
Content-Transfer-Encoding: 7bit
は、明らかに真実ではありません。
しかし、最も重要なことは、(それがutf-8
のように見える)charsetパラメータがiso-2022-jp
ですが、内容自体は非常に明確にiso-2022-jp
ではないという事実である。
あなたはを取得すると値の場合、MimeKitはContent-Type
ヘッダーに指定されている文字セットを使用して生ストリームコンテンツを変換して、その文字列を取得します。それが間違っている場合は、Text
プロパティの値も間違っています。
TextPart
には、GetTextという文字セットオーバーライドを指定できるメソッドがあります。
私がしようとして推薦する:それが動作するかどうか
var text = part.GetText (Encoding.UTF8);
を参照してください。
FWIW、iso-2022-jp
は、日本語の文字を7ビットのascii形式に強制的に変換するエンコーディングです。完全な奇妙な感じです。これは、iso-2022-jp
で実際にした場合、あなたの日本語のテキストは次のようになります。
BE:IU%U%!%$%kL>%F%9%H
私はそれがiso-2022-jp
ないことを知っている方法ですそれ:)
更新:
は最終的に、解決策は、おそらく意志
var encodings = new List<Encoding>();
string text = null;
try {
var encoding = Encoding.GetEncoding (part.ContentType.Charset,
new EncoderExceptionFallback(),
new DecoderExceptionFallback());
encodings.Add (encoding);
} catch (ArgumentException) {
} catch (NotSupportedException) {
}
// add utf-8 as our first fallback
encodings.Add (Encoding.GetEncoding (65001,
new EncoderExceptionFallback(),
new DecoderExceptionFallback()));
// add iso-8859-1 as our final fallback
encodings.Add (Encoding.GetEncoding (28591,
new EncoderExceptionFallback(),
new DecoderExceptionFallback()));
for (int i = 0; i < encodings.Count; i++) {
try {
text = part.GetText (encodings[i]);
break;
} catch (DecoderFallbackException) {
// this means that the content did not convert cleanly
}
}
編集は非常に...ニッキーピック? 私は気にしませんが、私たちがニックピックに向かうことができるなら、少なくとも、ニックピッキングを一貫させることができますか? つまり、MimeKitはMimeKitに一度編集されましたが、別のインスタンスが元のフォントに残っていました。 また、。emlはあるインスタンスでは '.eml'にニック・ピックされましたが、後のインスタンスではそうではありませんでした。 ありがとうございます。 –