解码quoted-printables

时间:2011-11-25 17:45:49

标签: iphone objective-c decode quoted-printable

我正在寻找一种解码quoted-printables的方法。

引用的printables适用于阿拉伯字符,如下所示:

  

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

我需要将其转换为字符串,然后存储或显示..

我已经在stackoverflow上发布了相反的方式(编码),但找不到解码。

6 个答案:

答案 0 :(得分:9)

嗯,它有点hacky但你可以用=字符替换%字符并使用NSString的stringByReplacingPercentEscapesUsingEncoding:方法。否则,您基本上可以在=字符上拆分字符串,将每个元素转换为字节值(使用NSScanner轻松完成),将字节值放入C数组,并使用NSString的initWithBytes:length:encoding:方法。

请注意,您的示例在技术上不是可引用的可打印格式,它指定quoted-printable是一个由=字符后跟两个十六进制数字组成的三字符序列。

答案 1 :(得分:3)

在我的情况下,我来自EML ... bensnider的答案很有效...引用 - 可打印(至少在EML中)使用=符号后跟\ r \ n来表示换行,所以这就是干净翻译所需的代码:

(作为一个类别因为我喜欢dem)

@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 :(得分:2)

Bensnider的答案是正确的,简单的方法。

你需要将“=”替换为“%”

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

s2存储“سعاد”,这是有道理的,所以这应该直接进行黑客攻击

答案 3 :(得分:2)

在某些情况下,行结尾不是“= \ r \ n”,而只是“= \ n”,在这种情况下,您需要另一个步骤: decodeString = [self stringByReplacingOccurrencesOfString:@“= \ n”withString:@“”];

否则,最后一步因一行末尾的“%”不平衡而失败。

答案 4 :(得分:1)

我对iPhone一无所知,但大多数电子邮件处理库都包含执行此操作的功能,因为电子邮件是使用此格式的地方。我建议搜索MIME解码类型函数,类似于enter link description here

早期的海报方式对我来说似乎也很好 - 我觉得他在将其描述为hacky时有点过于自嘲了:)

答案 5 :(得分:0)

请参阅一个工作解决方案,该解决方案采用带引号的可打印字符串并解析这些字形。您应该注意的唯一事情是编码(答案基于UTF8,可以很容易地切换到任何其他):https://stackoverflow.com/a/32903103/2799410