0

我们正在为实现 NNTP 协议的 iOS5 开发一个简单的 usenet 阅读器。

不幸的是,我们在编码方面遇到了一些问题:标头可能如下所示:

Subject: Re: [GA] =?ISO-8859-15?Q?Pr=FCfungsmodus?= 
Date: 22 Apr 2012 22:50:38 +0200

Objective-C 中是否有一些简单的方法可以将包含的 NSString 转换=?ISO-8859-15?Q?Pr=FCfungsmodus?= 为“ Prüfungsmodus”?

谢谢

编辑:

嗯。我不确定我是否正确:您的意思是:

NSRange range = [input rangeOfString:@"=?"];
NSRange range2 = [input rangeOfString:@"?="];

NSString *string_to_decode = [input substringWithRange:NSMakeRange(range.location, range2.location-(range.location-2))];


NSData *data = [string_to_decode dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:YES];

NSString *converted = [[NSString alloc] initWithData:data encoding:(NSISOLatin1StringEncoding)];

因为那行不通。。

EDIT2 尝试转换原始字节:

uint8_t buffer[1024];
iStream read:buffer maxLength:sizeof(buffer)
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSISOLatin1StringEncoding];

无论我在这里选择哪种编码,Subject:字段看起来总是一样的(除了日语等编码......)

4

1 回答 1

0

如果您是从第一原则自己做的,那么在大纲中:

  • 从网络读取字节
  • 确定特定编码中每次运行的范围 - 在您的示例中,您正在寻找 =?...?= 部分 [这看起来像 MIME 字编码] - 对于每个范围,您需要字节指针、长度、编码 [这可能既是字符集又是单独的编码样式,这里看起来像带有 Q 编码的 ISO-8859-15]
  • NSString为每个使用创建一个- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding

  • 连接

  • 您还需要处理输入中的其他转义序列,例如当输入包含文字时=?

有关 MIME 的详细信息,请查看 Wikipedia。

[编辑:在 MIME 上添加注释。]

于 2012-05-15T19:26:50.057 回答