декодирование цитируемых - PullRequest
8 голосов
/ 25 ноября 2011

Я ищу способ декодирования цитируемых печатных форм.

цитируемые печатные формы предназначены для арабских символов и выглядят так:

= D8 = B3 = D8 =B9 = D8 = A7 = D8 = AF

Мне нужно преобразовать его в строку и сохранить или отобразить ..

Я видел сообщение о stackoverflow для другогонаоборот (кодирование), но не удалось найти декодирование.

Ответы [ 6 ]

9 голосов
/ 25 ноября 2011

Хм, это немного глупо, но вы можете заменить символы = на % и использовать метод NSString stringByReplacingPercentEscapesUsingEncoding:. В противном случае вы можете по существу разделить строку на символы =, преобразовать каждый элемент в байтовое значение (это легко сделать с помощью NSScanner), поместить байтовые значения в массив C и использовать метод initWithBytes:length:encoding: NSString.

Обратите внимание, что ваш пример технически не представлен в формате цитируемых документов, который указывает, что напечатанный в кавычках представляет собой последовательность из трех символов, состоящую из символа =, за которым следуют две шестнадцатеричные цифры.

3 голосов
/ 05 июня 2012

В моем случае я исходил из EML ... ответ bensnider работал отлично ... quoted-printable (по крайней мере, в EML) использует знак = с последующим \ r \ n для обозначения переноса строки, так что это былкод, необходимый для точного перевода:

(Сделано как категория, потому что я люблю дем)

@interface NSString (QuotedPrintable)
- (NSString *)quotedPrintableDecode;
@end

@implementation NSString (QuotedPrintable)
- (NSString *)quotedPrintableDecode
{
    NSString *decodedString = [self stringByReplacingOccurrencesOfString:@"=\r\n" withString:@""]; // Ditch the line wrap indicators
    decodedString = [decodedString stringByReplacingOccurrencesOfString:@"=" withString:@"%"]; // Change the ='s to %'s
    decodedString = [decodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // Replace the escaped strings.
    return decodedString;
}
@end

Это прекрасно работает для декодирования моих объектов EML / UTF-8!

2 голосов
/ 25 сентября 2012

В некоторых случаях конец строки не "= \ r \ n", а только "= \ n", и в этом случае вам нужен еще один шаг: decodedString = [self stringByReplacingOccurferencesOfString: @ "= \ n" withString: @ ""];

В противном случае последний шаг завершится неудачно из-за несбалансированного «%» в конце строки.

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

Ответ Bensnider верный, простой способ.

вам нужно заменить "=" на "%"

NSString *s = @"%D8%B3%D8%B9%D8%A7%D8%AF";
NSString *s2 = [s stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

s2, сохраняя "سعاد", что делаетсмысл, так что это должно работать прямо без хака

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

Я ничего не знаю об iPhone, но большинство библиотек обработки электронной почты будут содержать функции для этого, поскольку в этом формате используется электронная почта.Я предлагаю поискать функции типа MIME-декодирования, аналогичные тем, которые указаны в , введите здесь описание ссылки .

Более ранний подход к постерам также кажется мне подходящим - я чувствую, что он слишком самоувереносуждающий в описании его как hacky:)

0 голосов
/ 02 октября 2015

Пожалуйста, посмотрите рабочее решение, которое принимает строки, содержащие кавычки для печати, и разрешает эти графемы.Единственное, на что следует обратить внимание - это кодировка (ответ основан на UTF8, поэтому его легко переключить на любой другой): https://stackoverflow.com/a/32903103/2799410

...