Приведенные выше ответы работают, но они кодируют всю строку. Обычно это не то, что вам нужно, особенно если вы используете этот код для чего-то вроде составления электронного письма.
Вероятнее всего, после этого вы будете использовать метод кодирования только тех символов, не являющихся ascii в QP.
Ввод:
Simply place the bass—that’s the whole bass—into the Bass-o-matic.
Выход (naiive):
=53=69=6D=70=6C=79=20=70=6C=61=63=65=20=74=68=65=20=62=61=73=73=E2=80=94=74=68=61=74=E2=80=99=73=20=74=68=65=20=77=68=6F=6C=65=20=62=61=73=73=E2=80=94=69=6E=74=6F=20=74=68=65=20=42=61=73=73=2D=6F=2D=6D=61=74=69=63=2E
Вывод (улучшено):
Simply place the bass=E2=80=94that=E2=80=99s the whole bass=E2=80=94into the Bass-o-matic.
Нечто подобное:
- (NSString *)qpEncodedStringWithString:(NSString *)string {
NSCharacterSet *asciiSet = [NSCharacterSet characterSetWithRange:NSMakeRange(0, 127)];
NSCharacterSet *invertedAscii = [asciiSet invertedSet];
// if the string contains non-ascii characters, we need to encode them
// otherwise, we'll just return the string below
if ([string rangeOfCharacterFromSet:invertedAscii].location != NSNotFound) {
// because the % sign is, itself, an ascii character, we must first replace it
// with a placeholder unlikely to occur in a string, but still within ascii
NSString *percentPlaceholder = @"QqQxXxPpP";
string = [string stringByReplacingOccurrencesOfString:@"%" withString:percentPlaceholder];
// use Apple's method to percent encode the string
string = [string stringByAddingPercentEncodingWithAllowedCharacters:asciiSet];
// replace those percents with = signs
string = [string stringByReplacingOccurrencesOfString:@"%" withString:@"="];
// and restore the true percent symbols
string = [string stringByReplacingOccurrencesOfString:percentPlaceholder withString:@"%"];
}
return string;
}
(строится из этого ответа для декодирования QP-строк из bensnider )