回答:
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で終了するデータを返しません。UTF8StringC文字列を返すメソッドのみが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];
str127より大きいコードポイントが含まれている場合、この回答は誤りです。これはstr.length、バイト数ではなく、Unicode文字の数を示すためです。たとえば、strisの場合@"にほんご"、str.length4が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!