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

Регистрация
23.03.2015
Сообщения
1 217
Благодарностей
748
Баллы
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?
Думаю найдутся и другие люди кому это будет полезно
 

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
43
В коде письма есть такие "кракозябры" 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

THE CaHeK

Client
Регистрация
29.01.2016
Сообщения
295
Благодарностей
115
Баллы
43
  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
Регистрация
23.03.2015
Сообщения
1 217
Благодарностей
748
Баллы
113
  • Спасибо
Реакции: viol2021

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
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?
Думаю найдутся и другие люди кому это будет полезно
Вставлю и своих 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
Регистрация
23.03.2015
Сообщения
1 217
Благодарностей
748
Баллы
113
Вставлю и своих 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 файла письма
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Блин, с объёмным кодом не срабатывает( Не ваш не предыдущие варианты.
Ошибка:"Выполнение действия CSharp OwnCode. Не удалось найти распознаваемые цифры."

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

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Я пытаюсь скормить полностью весь код eml файла. Обычно такой файл состоит из 4 частей, Шапка с данными письма, текстовая версия письма, hTML версия письма, Base64 код вложения если есть. Если отправлять по отдельности текстовую или HTML версию письма, декодирование проходит хорошо. А вот если запекать полностью всё письмо, выдает ошибку. Получить такой файл для примера можно скачав любое письмо gmail.com
Вы описали все что нужно сделать, чтобы получить файл.

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

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

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