C # Проблемы с кодировкой символов - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь создать транспортный агент, который анализирует тело письма, чтобы найти соответствующие фрагменты информации, и заменяет общую строку темы конкретными данными.Моя проблема заключается в том, что строка темы должна выглядеть следующим образом: 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 в соответствии с заголовком электронного письма.Моя проблема в том, что из этого вопроса и этого вопроса я понимаю, что 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...