Декодировать qp код

Регистрация
23.03.2015
Сообщения
1 308
Реакции
848
Баллы
113
В коде письма есть такие "кракозябры" qp код(=D0=B2=D0=B0=D0=B6=D0=BD=D0=BE).
Мне для нормально работы с кодом надо его декодировать. Нашёл вот такую инфу: https://stackoverflow.com/questions/2226554/c-class-for-decoding-quoted-printable-encoding
Может кто подскажет как это реализовать в Zennoposter?
Думаю найдутся и другие люди кому это будет полезно
 
В коде письма есть такие "кракозябры" qp код(=D0=B2=D0=B0=D0=B6=D0=BD=D0=BE).
Мне для нормально работы с кодом надо его декодировать. Нашёл вот такую инфу: https://stackoverflow.com/questions/2226554/c-class-for-decoding-quoted-printable-encoding
Может кто подскажет как это реализовать в Zennoposter?
Думаю найдутся и другие люди кому это будет полезно
C#:
Развернуть Свернуть Копировать
public class DecodeQP
{
    public string quotedprintable(string data)
{
    data = data.Replace("=\r\n", "");
    for (int position = -1; (position = data.IndexOf("=")) != -1;)
    {
        string leftpart = data.Substring(0, position);
        System.Collections.ArrayList hex = new System.Collections.ArrayList();
        hex.Add(data.Substring(1 + position, 2));
        while (position + 3 < data.Length && data.Substring(position + 3, 1) == "=")
        {
            position = position + 3;
            hex.Add(data.Substring(1 + position, 2));
        }
        byte[] bytes = new byte[hex.Count];
        for (int i = 0; i < hex.Count; i++)
        {
            bytes[i] = System.Convert.ToByte(new string(((string)hex[i]).ToCharArray()), 16);
        }
        string equivalent = System.Text.Encoding.GetEncoding("UTF-8").GetString(bytes);
        string rightpart = data.Substring(position + 3);
        data = leftpart + equivalent + rightpart;
    }
    return data;
}
}
Это в общий код

Вызывать так

C#:
Развернуть Свернуть Копировать
string qpCode = "=D0=B2=D0=B0=D0=B6=D0=BD=D0=BE";

DecodeQP dq = new DecodeQP();
var decode = dq.quotedprintable(qpCode);
 
  • Спасибо
Реакции: KolkaPetkinSyn
  1. В шаблон нужно добавить - директивы using и общий код.
  2. Вставить метод в место показанное на скрине. И дальше подставляете свои данные и вызываете из кубика.
  3. Метод:
    Развернуть Свернуть Копировать
            public static string Decode(string input, string bodycharset) {
    var i = 0;
    var output = new List<byte>();
    while (i < input.Length) {
    if (input[i] == '=' && input[i + 1] == '\r' && input[i + 2] == '\n') {
    //Skip
    i += 3;
    } else if (input[i] == '=') {
    string sHex = input;
    sHex = sHex.Substring(i + 1, 2);
    int hex = Convert.ToInt32(sHex, 16);
    byte b = Convert.ToByte(hex);
    output.Add(b);
    i += 3;
    } else {
    output.Add((byte)input[i]);
    i++;
    }
    }
    
    
    if (String.IsNullOrEmpty(bodycharset))
    return Encoding.UTF8.GetString(output.ToArray());
    else {
    if (String.Compare(bodycharset, "ISO-2022-JP", true) == 0)
    return Encoding.GetEncoding("Shift_JIS").GetString(output.ToArray());
    else
    return Encoding.GetEncoding(bodycharset).GetString(output.ToArray());
    }
    
    }
  4. Кубик C#:
    Развернуть Свернуть Копировать
    // Вернуть в переменную
    project.Variables["output"].Value = CommonCode.Decode(project.Variables["input"].Value,"utf-8");
99364

Если что, шаблон прикрепил.

UPD.
Пока писал, уже дали ответ выше.
 

Вложения

  • Спасибо
Реакции: volody00 и KolkaPetkinSyn
В коде письма есть такие "кракозябры" qp код(=D0=B2=D0=B0=D0=B6=D0=BD=D0=BE).
Мне для нормально работы с кодом надо его декодировать. Нашёл вот такую инфу: https://stackoverflow.com/questions/2226554/c-class-for-decoding-quoted-printable-encoding
Может кто подскажет как это реализовать в Zennoposter?
Думаю найдутся и другие люди кому это будет полезно
Вставлю и своих 5 копеек :)
C#:
Развернуть Свернуть Копировать
string code = "=D0=B2=D0=B0=D0=B6=D0=BD=D0=BE";
var bytes = code.Split(new[]{"="}, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => Convert.ToByte(s, 16)).ToArray();
return Encoding.UTF8.GetString(bytes);
99426
 
  • Спасибо
Реакции: viol2021 и KolkaPetkinSyn
Вставлю и своих 5 копеек :-)
C#:
Развернуть Свернуть Копировать
string code = "=D0=B2=D0=B0=D0=B6=D0=BD=D0=BE";
var bytes = code.Split(new[]{"="}, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => Convert.ToByte(s, 16)).ToArray();
return Encoding.UTF8.GetString(bytes);
Посмотреть вложение 99426
Блин, с объёмным кодом не срабатывает( Не ваш не предыдущие варианты.
Ошибка:"Выполнение действия CSharp OwnCode. Не удалось найти распознаваемые цифры."

qp пытаюсь убрать из eml файла письма
 
Блин, с объёмным кодом не срабатывает( Не ваш не предыдущие варианты.
Ошибка:"Выполнение действия CSharp OwnCode. Не удалось найти распознаваемые цифры."

qp пытаюсь убрать из eml файла письма
Чтобы попытаться Вам помочь - нужны входные данные (что именно Вы скармливаете коду) и что хотите получить на выходе.
Решения выше - просто разбивают строку по знаку равно, и предполагают, что следующих 2 символа - это один байт.
Но, вполне может быть, что там где-то ещё пробелы есть или ещё чего - смотреть надо.
 
Чтобы попытаться Вам помочь - нужны входные данные (что именно Вы скармливаете коду) и что хотите получить на выходе.
Решения выше - просто разбивают строку по знаку равно, и предполагают, что следующих 2 символа - это один байт.
Но, вполне может быть, что там где-то ещё пробелы есть или ещё чего - смотреть надо.
Я пытаюсь скормить полностью весь код eml файла. Обычно такой файл состоит из 4 частей, Шапка с данными письма, текстовая версия письма, hTML версия письма, Base64 код вложения если есть. Если отправлять по отдельности текстовую или HTML версию письма, декодирование проходит хорошо. А вот если запекать полностью всё письмо, выдает ошибку. Получить такой файл для примера можно скачав любое письмо gmail.com
 
Я пытаюсь скормить полностью весь код eml файла. Обычно такой файл состоит из 4 частей, Шапка с данными письма, текстовая версия письма, hTML версия письма, Base64 код вложения если есть. Если отправлять по отдельности текстовую или HTML версию письма, декодирование проходит хорошо. А вот если запекать полностью всё письмо, выдает ошибку. Получить такой файл для примера можно скачав любое письмо gmail.com
Вы описали все что нужно сделать, чтобы получить файл.

Пожалуйста, выполните то что Вы описали, сохраните данные в txt файле и пришлите сюда.
И укажите что именно хотите извлечь (откройте этот же файл в блокноте или в чем-то ещё, на каком-то скриншоте стрелочкой покажите что пытаетесь извлечь), напишите что именно должно получиться на выходе.

Постараюсь помочь. Только у меня перебои с светом - могу отвечать с задержкой.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)