C#字符编码问题

时间:2019-07-08 22:05:30

标签: c# character-encoding

我正在尝试创建一个传输代理,该代理解析电子邮件的正文以查找相关的信息,并用特定的细节替换通用的主题行。我的问题是主题行应显示为: ABC Co Error: No status reason code (0123456) 而是显示为 A B C C o E r r o r : N o s t a t u s r e a s o n c o d e ( 0 1 2 3 4 5 6 )

电子邮件为纯文本,并根据电子邮件标题以us-ascii进行编码。我的问题是,根据this questionthis question的理解,C#使用UTF-16作为默认字符串编码。每个字符之间的空格使我相信我的代码正在以某种方式将ASCII隐式转换为UTF-16,但是我不知道会在哪里发生。有关如何使其正常工作的任何想法?

    void OnSubmittedMessageHandler(SubmittedMessageEventSource source, QueuedMessageEventArgs args)
    {
        this.mailItem = args.MailItem;
        for (int intCounter = this.mailItem.Recipients.Count - 1; intCounter >= 0; intCounter--)
        {
            // Check if the email was sent to automated@mydomain.com
            string msgRecipientP1 = this.mailItem.Recipients[intCounter].Address.LocalPart;
            if (msgRecipientP1.ToLower() == "automated")
            {
                // Read the body of the email
                string line = "";
                Dictionary<string, string> EDIErrors = new Dictionary<string, string>();
                Body body = this.mailItem.Message.Body;
                Stream originalBodyContent = body.GetContentReadStream();
                StreamReader streamReader = new StreamReader(originalBodyContent, System.Text.Encoding.ASCII, true);
                while ((line = streamReader.ReadLine()) != null)
                {
                    if (line.IndexOf("Partner:") > 0)
                    {
                        line.Replace(": ", ":");
                        string[] lineParts = line.Split(new[] { "  " }, StringSplitOptions.None);
                        foreach (string EDIErrorPart in lineParts)
                        {
                            int idx = EDIErrorPart.IndexOf(':');
                            int qidx = EDIErrorPart.IndexOf('"');
                            if (idx > 0)
                            {
                                EDIErrors[EDIErrorPart.Substring(0, idx).ToLower()] = EDIErrorPart.Substring(idx + 1).ToLower();
                            }
                            else if (qidx > 0)
                            {
                                EDIErrors["Message"] = EDIErrorPart.Replace("\"", string.Empty);
                            }
                        }
                    }
                }
                if (originalBodyContent != null)
                {
                    originalBodyContent.Close();
                }

                // Build the new Subject line and the recipient groups
                string sOrder;
                string sMessage;
                string sDistroGroup;
                EDIErrors.TryGetValue("Order", out sOrder);
                EDIErrors.TryGetValue("Message", out sMessage);
                EDIErrors.TryGetValue("Partner", out sDistroGroup);
                string NewSubject = sPartner + " Error: " + sMessage + "(" + sOrder + ")";

                this.mailItem.Message.Subject = NewSubject;
                if (IsTicketable)
                {
                    this.mailItem.Recipients.Add(new RoutingAddress("helpdesk@mydomain.com"));
                }
            }
        }
        return;
    }

0 个答案:

没有答案