1

私のシナリオは次のとおりです。

  • Outlook Express で電子メールを作成し、.eml ファイルとして保存します。
  • C# コンソール アプリケーションでファイルを文字列として読み取ります。

utf-8 でエンコードされた .eml ファイルを保存しています。私が書いたテキストの例は次のとおりです。

  1. 「Goiânia é badalação.」

âéçã などの特殊文字があります。ポルトガル語の文字です。notepad++ でファイルを開くと、テキストは次のように表示されます。

  1. 「ゴイ=C3=A2ニア=C3=A9バダラ=C3=A7=C3=A3o.」

もう一度 outook express で開くと、最初の方法のように正常に表示されます。utf-8 デコードを使用してコンソール アプリケーションでファイルを読み取ると、文字列は 2 番目の方法のように表示されます。

私が使用しているコードは次のとおりです。

string text = File.ReadAllText(@"C:\fromOutlook.eml", Encoding.UTF8);
Console.WriteLine(text);

Web で見つけたすべてのエンコード オプションと多くの方法を試しましたが、何も機能しません。誰かがこの簡単な変換を手伝ってくれますか?

「ゴイ=C3=A2ニア=C3=A9バダラ=C3=A7=C3=A3o.」「Goiânia é badalação」へ。

    string text = "Goi=C3=A2nia =C3=A9 badala=C3=A7=C3=A3o.";

    byte[] bytes = new byte[text.Length * sizeof(char)];
    System.Buffer.BlockCopy(text.ToCharArray(), 0, bytes, 0, bytes.Encoding.UTF8.GetString(bytes, 0, bytes.Length);

    char[] chars = new char[bytes.Length / sizeof(char)];
    System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
    Console.WriteLine(new string(chars));

この utf-8 テーブルでは、16 進数を確認できます。これらの文字の値、'é' == 'c3 a9': http://www.utf8-chartable.de/

ありがとう。

4

2 に答える 2

1
var input = "Goi=C3=A2nia =C3=A9 badala=C3=A7=C3=A3o.";             
var buffer = new List<byte>();
var i = 0;
while(i < input.Length)
{
    var character = input[i];
    if(character == '=')
    {
        var part = input.Substring(i+1,2);
        buffer.Add(byte.Parse(part, System.Globalization.NumberStyles.HexNumber));
        i+=3;
    }
    else
    {
        buffer.Add((byte)character);
        i++;
    }
};
var output = Encoding.UTF8.GetString(buffer.ToArray());
Console.WriteLine(output); // prints: Goiânia é badalação.
于 2013-02-15T12:36:28.587 に答える
1

問題が印刷可能であることがわかっているため、ここで適切なデコーダーを見つけました。

http://www.dpit.co.uk/2011/09/decoding-quoted-printable-email-in-c.html

これは私にとってはうまくいきます。

ありがとうございます。

更新: 上記のリンクは無効になっています。実行可能なアプリケーションは次のとおりです。

Quoted-Print 文字列の変換方法

于 2013-02-15T13:42:04.663 に答える