2010-08-02 3 views
2

Может кто-нибудь, пожалуйста, скажите мне, как это сделать на C#?Вопрос о преобразовании

Конвертировать из Quoted Для печати в двоичный формат, а затем использовать кодировку UTF-8 для декодирования этого двоичного текста.

Вот пример текста, мне нужно цитировал:

"Commentaires:. Je суис abonn = С3 = A9 = C3 = A0 ла livraison = C3 = A0 домицилий Depuis longtemps"

+0

Это домашнее задание? http://www.motobit.com/util/base64-decoder-encoder.asp;) – Nix

+0

Вы должны указать свой вопрос полностью. Термины, которые вы используете, являются неопределенными и нечеткими. – Noldorin

+0

ОК, Добавлен пример. – user390480

ответ

3

ОК, поэтому ваш вопрос в основном состоит из двух вопросов в одном. Во-первых, вы должны иметь возможность декодировать quoted-printable. Я предполагаю, что у вас есть закодированный текст в виде строки. Вам нужно будет пропустить эту строку с помощью цикла while, как показано ниже. Я преднамеренно оставил часть, в которой вы превращаете два шестнадцатеричных символа в байты; Я уверен, что вы можете понять это для себя :)

var i = 0; 
var output = new List<byte>(); 
while (i < input.Length) 
{ 
    if (input[i] == '=' && input[i+1] == '\r' && input[i+2] == '\n') 
    { 
     // skip this 
     i += 3; 
    } 
    else if (input[i] == '=') 
    { 
     byte b = (construct the byte from the characters input[i+1] and input[i+2]); 
     output.Add(b); 
     i += 3; 
    } 
    else 
    { 
     output.Add((byte)input[i]); 
     i++; 
    } 
} 

В конце этого output содержит исходные байты. Теперь все, что вам нужно сделать, это расшифровать его, используя UTF8:

var outputString = Encoding.UTF8.GetString(output.ToArray()); 

Если у вас есть какие-либо вопросы, пожалуйста, обращайтесь в комментарии. И помните: не копируйте и не используйте код, который вы не понимаете :)

+0

Кстати, код, который я отправил, будет сбой при получении недопустимого ввода, например '' = A "'. Можете ли вы понять, почему и как это исправить? – Timwi

+0

Извините, я просто не понимаю, как преобразовать равные C3 и равно A9 символу é (латинская маленькая буква e с острым), равно равным C3 и равна A0 для символа à (латинская маленькая буква a с серьезным) , – user390480

+0

Вам не обязательно. Это то, что «Encoding.UTF8» делает для вас. Все, что вам нужно сделать, это преобразовать символы C '' 3 'в байты 0xC3 (195) и т. Д. – Timwi

Смежные вопросы