0

我正在尝试制作一个电子邮件服务来发送已在我们系统的其他地方处理过的附件。对此的要求是客户端需要在作业设置中指定的特定编码。在一个测试应用程序中,我试图发送带有不同编码附件的电子邮件,但是当我在 IE 或 notepad++ 中查看时,我得到一堆问号,而不是正确编码的文件。我做错了什么?

        var current_month = @"<?xml version=""1.0"" encoding=""utf-8""?>
                                <test>
                                ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789
                                abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ
                                –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд
                                ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა

                                Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι,
                                ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς
                                λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ
                                τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿
                                εἰς τοῦτο προήκοντα,  ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ
                                πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν
                                οἱ τὰ τοιαῦτα λέγοντες ἢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι,
                                οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν
                                ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον
                                τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι
                                γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν
                                προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους
                                σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ
                                τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ
                                τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς
                                τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον.
                                </test>";

        var newEncoding = Encoding.UTF8;

        var bytes = Encoding.Default.GetBytes(current_month);
        var newBytes = Encoding.Convert(Encoding.Default, newEncoding, bytes);

        var msCurrent = new MemoryStream(newBytes);

        var attachment = new Attachment(msCurrent, "testattachment3.xml", MediaTypeNames.Text.Xml);
        attachment.ContentType = new ContentType("text/xml");

        var message = new MailMessage("them", "me");
        message.BodyEncoding = newEncoding;

        message.Attachments.Add(attachment);

        new SmtpClient("192.168.6.25")
        {
          UseDefaultCredentials = true
        }.Send(message);
4

1 回答 1

0

在此测试中,字符串 UTF8 正确编码和解码。
为什么要编码为默认值并进行转换,而不是直接将字符串加载到 UTF8 中?

string current_month = @"<?xml version=""1.0"" encoding=""utf-8""?>
                    <test>
                    ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789
                    abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ
                    –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд
                    ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა

                    Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι,
                    ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς
                    λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ
                    τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿
                    εἰς τοῦτο προήκοντα,  ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ
                    πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν
                    οἱ τὰ τοιαῦτα λέγοντες ἢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι,
                    οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν
                    ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον
                    τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι
                    γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν
                    προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους
                    σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ
                    τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ
                    τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς
                    τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον.
                    </test>";
Encoding newEncoding = Encoding.UTF8;
byte[] bytes = newEncoding.GetBytes(current_month);
string stringOut = newEncoding.GetString(bytes);
System.Diagnostics.Debug.WriteLine(string.Compare(current_month, stringOut).ToString());
tb1.Text = current_month;
tb2.Text = stringOut;
于 2013-08-19T14:53:51.697 回答