我正在寻找一种解码quoted-printables的方法。
引用的printables适用于阿拉伯字符,如下所示:
= D8 = B3 = D8 = B9 = D8 = A7 = D8 = AF
我需要将其转换为字符串,然后存储或显示..
我已经在stackoverflow上发布了相反的方式(编码),但找不到解码。
答案 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