2011-02-19 7 views
1

NSStringを75オクテット(UTF8表現)以下のNSStringに分割したい。NSStringをいくつかのオクテットに書き込む方法

私のNSStringが完全にasciiであれば、それは簡単にはわかりません。

しかし、結果の文字列は18〜75文字の長さになる可能性があるので、実際の作成方法はわかりません。

どうすればいいですか?

文字列をオクテットに変換し、最初の75を取り、それをNSStringに変換して、NSStringがutf8文字を2つの部分にリッピングしたことを伝えたいと願っていますか?

答えて

1

ウォーレンの答えは私が正しい軌道にいることを示してくれました。これは私が思いついたものです:

- (NSString *)foldString:(NSString *)string withOctetCount:(NSInteger)octetCount { 
    NSMutableString *output = [NSMutableString string]; 
    NSData *stringData = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 
    NSInteger convertedBytes = 0; 
    while (convertedBytes < [stringData length]) { 
     NSString *subString = nil; 
     NSInteger usedLength = octetCount; 
     if (convertedBytes > 0) { 
      // all lines after the first one get a space as prefix. so use one octet less in those lines 
      usedLength--; 
     } 
     if (convertedBytes + usedLength > [stringData length]) { 
      usedLength = [stringData length] - convertedBytes; 
     } 
     while (!subString) { 
      NSData *data = [stringData subdataWithRange:NSMakeRange(convertedBytes, usedLength)]; 
      subString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 
      if (!subString) { 
       usedLength--; 
       if (usedLength == 0) { 
        // TODO: remove abort 
        abort(); 
        return nil; 
       } 
      } 
     } 
     //  NSLog(@"Used %d octets", usedLength); 
     if (convertedBytes == 0) { 
      // Dont prefix with space on first line 
      [output appendString:subString]; 
     } 
     else { 
      [output appendFormat:@"\r\n %@", subString]; 
     } 
     convertedBytes += usedLength; 
    } 
    return output; 
} 
0

NSStringは終端されていないC文字列を与えるが、それはやるカント場合は文字

- (const char *)cStringUsingEncoding:(NSStringEncoding)encoding

の損失はあなたにCの文字列ではなくNULLにBARFを与えることを試みることができます

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)flag

を持っていますそれは無損失に

あなたがaboであることを検出する方法かもしれないutは一対を分ける。

関連する問題