Eğer bir NSString tabanlı, amaç-C fonksiyonu / kategori yöntemine php fonksiyonu quoted_printable_decode () çevirebilir?

2 Cevap php

In http://php.net/quoted_printable_decode, ben preg_replace kullanarak bunu yapmak için yollar bulundu. Şey RFC 2045 bölüm 6.7 normal bir NSString dönüştürmek herhangi bir kodu bilen herkes?

Şimdiden teşekkürler!

2 Cevap

Orada bir alıntı yazdırılabilir bir dize çözmek için Kakao hiçbir yöntem, ancak kolayca gibi bir şey kendiniz yazabilirsiniz:

@interface NSString (QuotedPrintableStrings)
+(NSString*)stringWithQuotedPrintableString:(const char *)qpString;
@end

@implementation NSString (QuotedPrintableStrings)

+(NSString*)stringWithQuotedPrintableString:(const char *)qpString
{
    const char *p = qpString;
    char *ep, *utf8_string = malloc(strlen(qpString) * sizeof(char));
    NSParameterAssert( utf8_string );
    ep = utf8_string;

    while( *p ) {
    	switch( *p ) {
    		case '=':
    			NSAssert1( *(p + 1) != 0 && *(p + 2) != 0, @"Malformed QP String: %s", qpString);
    			if( *(p + 1) != '\r' ) {
    				int i, byte[2];
    				for( i = 0; i < 2; i++ ) {
    					byte[i] = *(p + i + 1);
    					if( isdigit(byte[i]) )
    						byte[i] -= 0x30;
    					else
    						byte[i] -= 0x37;
    					NSAssert( byte[i] >= 0 && byte[i] < 16, @"bad encoded character");
    				}
    				*(ep++) = (char) (byte[0] << 4) | byte[1];
    			}
    			p += 3;
    			continue;
    		default:
    			*(ep++) = *(p++);
    			continue;
    	}
    }
    return [[[NSString alloc] initWithBytesNoCopy:utf8_string length:strlen(utf8_string) encoding:NSUTF8StringEncoding freeWhenDone:YES] autorelease];
}

@end

Diğerleri bu işlevselliği arayanlar için, Jason Coco's cevap gerçekten iyi çalışıyor, ama önemli bir hata vardır. Sen dönmeden önce utf8_string sonuna bir boş karakter eklemek gerekir. Dolayısıyla, sadece return deyimi önce, çizgi *ep = '\0'; ekleyebilir ve o hile yapmak gerekir. Ayrıca, çözülen dize UTF-8 farklı bir karakter kodlaması kullanabilir çünkü, bir NSData nesneyi ziyade NSString dönmek için modifiye. return [NSData dataWithBytes:(char *)utf8_string length:strlen(utf8_string)]; gibi bir şey iyi çalışıyor. Sonra arama yöntemi uygun kodlamayı kullanarak bir geri NSString haline döndürülen verileri doldurma bakabilirim.