私のシナリオは次のとおりです。
- Outlook Express で電子メールを作成し、.eml ファイルとして保存します。
- C# コンソール アプリケーションでファイルを文字列として読み取ります。
utf-8 でエンコードされた .eml ファイルを保存しています。私が書いたテキストの例は次のとおりです。
- 「Goiânia é badalação.」
âéçã などの特殊文字があります。ポルトガル語の文字です。notepad++ でファイルを開くと、テキストは次のように表示されます。
- 「ゴイ=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/
ありがとう。