回答:
NSString* str = @"teststring";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString
ありません)内部でUTF-16を使用しているため、UTF-16 <-> UTF-8変換を行う必要がないため、パフォーマンスが若干向上する可能性があります。個人的には、パフォーマンスよりも(@ gnasher729が示唆するように)堅牢性を優先し、どこでもUTF-8を使用します。
行う:
NSData *data = [yourString dataUsingEncoding:NSUTF8StringEncoding];
その後、自由に続行してくださいNSJSONSerialization:JSONObjectWithData
。
コメント、公式文書、および検証に続いて、この回答は、疑わしいNULLターミネーターの削除に関して更新されました。
dataUsingEncoding:で文書化されているように:
戻り値
dataUsingEncoding:allowLossyConversion:
2番目の引数としてNOを使用して呼び出した結果
getCString:maxLength:encoding:およびcStringUsingEncoding:で文書化されているように:
によって返されるデータは、NULLターミネータを持たない
dataUsingEncoding:allowLossyConversion:
ため、厳密なC文字列ではないことに注意してください。
dataUsingEncoding:
nullで終了するデータを返しません。UTF8String
C文字列を返すメソッドのみがnullで終了する文字列を返します。
(note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator)
。早くこれを見逃していたに違いない。でも、将来は必ず何か書くつもりです。
cStringUsingEncoding:
ます。私は下を見ていましたdataUsingEncoding:
。)
Swift Developerがここに来る場合、
NSString / StringからNSDataに変換する
var _nsdata = _nsstring.dataUsingEncoding(NSUTF8StringEncoding)
Objective-C:
NSString *str = @"test string";
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:str];
NSString *thatStr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
迅速:
let str = "test string"
let data = NSKeyedArchiver.archivedData(withRootObject: str)
let thatStr = NSKeyedUnarchiver.unarchiveObject(with: data) as! String
NSString *str = @"hello";
NSData *data = [NSData dataWithBytes:str.UTF8String length:str.length];
str
127より大きいコードポイントが含まれている場合、この回答は誤りです。これはstr.length
、バイト数ではなく、Unicode文字の数を示すためです。たとえば、str
isの場合@"にほんご"
、str.length
4がstr.UTF8String
返されますが、実際には12バイトが含まれています。で置き換えstr.length
ても、のようにNULL文字strlen(str.UTF8String)
がstr
含まれている場合は、依然として正しくありません@"にほ\0んご"
。
Objective-C:
NSStringからNSDataへ:
NSString* str= @"string";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSDataからNSStringへ:
NSString* newStr = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
迅速:
文字列からデータへ:
var testString = "string"
var somedata = testString.data(using: String.Encoding.utf8)
文字列へのデータ:
var backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String!