length
「Unicode 文字の数」のように、文字列の長さを返します。バッキング ストアのバイト数は返しません。
NSString を NSData に変換するには、次のようなものを使用する必要があります。
NSString *someString = @"123";
NSData *someData = [someString dataUsingEncoding:NSUTF8StringEncoding];
UTF8でもASCII文字は1バイトしか占有しないため、ASCIIのみを含むUTF8で機能します。偶然にも、文字列の「論理的な」長さがバッキング ストアのサイズと一致します。
ASCII 範囲外の文字を含む文字列を試してみると、異なる結果が表示されます。
NSString *asciiString = @"123";
NSLog(@"\"%@\" - Length: %ld", asciiString, (long)[asciiString length]);
NSData *asciiData = [asciiString dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Data length: %ld", [asciiData length]);
NSString *utf8String = @"";
NSLog(@"\"%@\" - Length: %ld", utf8String, (long)[utf8String length]);
NSData *utf8Data = [utf8String dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Data length: %ld", [utf8Data length]);
utf8String = @"oö";
NSLog(@"\"%@\" - Length: %ld", utf8String, (long)[utf8String length]);
utf8Data = [utf8String dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Data length: %ld", [utf8Data length]);
収量:
"123" - Length: 3
Data length: 3
"" - Length: 2
Data length: 4
"oö" - Length: 2
Data length: 3