Декодирование Base64 / цитируемой печатной кодированной строки UTF8 - PullRequest
1 голос
/ 14 февраля 2012

В моем рабочем процессе приложения ASP.Net мне нужно немного поработать со строкой, которая равна примерно

=?utf-8?B?SWhyZSBCZXN0ZWxsdW5nIC0gVmVyc2FuZGJlc3TDpHRpZ3VuZyAtIDExMDU4OTEyNDY=?=

Как я могу декодировать ее на обычный человеческий язык?

Заранее спасибо!

Обновление:

Convert.FromBase64String() не работает для строки, что равно =?UTF-8?Q?Bestellbest=C3=A4tigung?=

Я получаю The format of s is invalid. s contains a non-base-64 character, more than two padding characters, or a non-white space-character among the padding characters. исключение.

Обновление:

Решение здесь

Альтернативное решение

Обновление:

Что это за кодировка строки: Nweiß ???

Ответы [ 7 ]

3 голосов
/ 02 сентября 2013

Я написал библиотеку, которая будет декодировать эти виды строк. Вы можете найти его на http://github.com/jstedfast/MimeKit

В частности, посмотрите на MimeKit.Utils.Rfc2047.DecodeText()

2 голосов
/ 14 февраля 2012

Кажется, это MIME-кодировка заголовка.Символ Q во втором примере указывает, что он цитируется для печати. ​​

Этот вопрос , кажется, достаточно хорошо охватывает варианты.В быстром поиске я не нашел библиотек .NET, которые бы автоматически декодировали это, но это не должно быть сложно сделать вручную, если вам нужно.

2 голосов
/ 14 февраля 2012

На самом деле это строка base-64:

        string zz = "SWhyZSBCZXN0ZWxsdW5nIC0gVmVyc2FuZGJlc3TDpHRpZ3VuZyAtIDExMDU4OTEyNDY=";

        byte[] dd = Convert.FromBase64String(zz);

        // Returns Ihre Bestellung - Versandbestätigung - 1105891246
        string yy = System.Text.Encoding.UTF8.GetString(dd);
2 голосов
/ 14 февраля 2012

Это не UTF8. Это строка в кодировке Base64.

UTF-8 только указывает, что целевая строка имеет формат UTF8. После декодирования строки Base64:

SWhyZSBCZXN0ZWxsdW5nIC0gVmVyc2FuZGJlc3TDpHRpZ3VuZyAtIDExMDU4OTEyNDY=

Вы получите следующий результат:

Ihre Bestellung - Versandbestätigung - 1105891246

См. Base64 онлайн-декодирование / кодирование

1 голос
/ 29 августа 2013

Это закодированное слово , которое используется в заголовках сообщений электронной почты, когда имеется контент, отличный от ASCII. Закодированные слова определены в RFC 2047:

http://tools.ietf.org/html/rfc2047#section-2

BNF для закодированного слова:

encoded-word = "=?" charset "?" encoding "?" encoded-text "?="

Итак, правильный способ интерпретировать это так:

  1. Данные находятся между 3-м и 4-м вопросительными знаками
  2. Он был закодирован в Base64 («B» означает Base64; если бы он был «Q», тогда он будет напечатан в кавычках).
  3. Как только вы расшифруете данные, они будут в наборе символов UTF-8.

Результат, как правильно заметил @Shai:

Ihre Bestellung - Versandbestätigung - 1105891246

Это немецкий. Умляут, очевидно, причина UTF-8 и, следовательно, необходимость в закодированном слове. Перевод:

Your order - Delivery confirmation - 1105891246

Видимо, это номер для отслеживания заказа.

Все современные почтовые клиенты (и Outlook) прозрачно поддерживают кодированные слова.

1 голос
/ 14 февраля 2012

Похоже на строку base64.

Попробуйте Convert.FromBase64String

http://msdn.microsoft.com/en-us/library/system.convert.frombase64string.aspx

0 голосов
/ 14 февраля 2012

Это немного догадок, но давайте попробуем

  • удалить =? с начала и ?= с конца
  • сохранить начало до следующего ? как набор символов
  • Удалите B? - не знаю, что это
  • Преобразовать остальные в byte[] через System.Convert.FromBase64String()
  • Преобразовать это в последнюю строку через Encoding.GetSTring(), используя набор символов, запомненный на втором шаге
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...