Answers:
NSString* str = @"teststring";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString-16 අභ්යන්තරව භාවිතා කරයි, එබැවින් යූටීඑෆ් -16 <-> යූටීඑෆ් -8 පරිවර්තනයක් කිරීමට අවශ්ය නොවන නිසා සුළු කාර්ය සාධනයක් ලබා ගත හැකිය. පුද්ගලිකව, අපි කැමතියි (@ gnasher729 යෝජනා කරන පරිදි) කාර්ය සාධනයට වඩා ශක්තිමත් බව සහ සෑම තැනකම UTF-8 භාවිතා කරන්න.
කරන්න:
NSData *data = [yourString dataUsingEncoding:NSUTF8StringEncoding];
ඉදිරියට යාමට නිදහස් වන්න NSJSONSerialization:JSONObjectWithData.
අදහස්, නිල ලියකියවිලි සහ සත්යාපන වලින් පසුව , NULL ටර්මිනේටරයක් ඉවත් කිරීම සම්බන්ධයෙන් මෙම පිළිතුර යාවත්කාලීන කරන ලදි:
DataUsingEncoding විසින් ලේඛනගත කර ඇති පරිදි :
ප්රතිලාභ අගය
dataUsingEncoding:allowLossyConversion:දෙවන තර්කය ලෙස NO සමඟ ආයාචනා කිරීමේ ප්රති result ලය
GetCString: maxLength: encoding: සහ cStringUsingEncoding විසින් ලේඛනගත කර ඇති පරිදි :
NULL ටර්මිනේටරයක් නොමැති
dataUsingEncoding:allowLossyConversion:බැවින් ආපසු ලබා දෙන දත්ත දැඩි සී-ස්ට්රිං එකක් නොවන බව සලකන්න
dataUsingEncoding:අවලංගු කරන ලද දත්ත ආපසු ලබා නොදේ. UTF8Stringසී නූලක් ආපසු ලබා දෙන වෙනත් ක්රම පමණක් ශුන්ය-අවසන් කළ නූලක් ලබා දෙයි.
(note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator). මට මීට පෙර මෙය මග හැරී තිබිය යුතුය. අනාගතයේදී ඕනෑම දෙයක් ලිවීමට මම වග බලා ගන්නෙමි.
cStringUsingEncoding:. මම යටතේ බලාපොරොත්තු වන dataUsingEncoding:.)
ස්විෆ්ට් සංවර්ධකයා මෙහි පැමිණෙන්නේ නම්,
NSString / String සිට NSData බවට පරිවර්තනය කිරීමට
var _nsdata = _nsstring.dataUsingEncoding(NSUTF8StringEncoding)
පරමාර්ථය-සී:
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
පළමුවෙන්ම, ඔබ dataUsingEncoding:ඒ හරහා යාම වෙනුවට භාවිතා කළ යුතුය UTF8String. ඔබ භාවිතා UTF8Stringකරන්නේ ඔබට Cඑම කේතීකරණයේ නූලක් අවශ්ය වූ විට පමණි .
එවිට, ඔබේ පණිවිඩය වෙනුවට UTF-16සම්මත කරන්න .NSUnicodeStringEncodingNSUTF8StringEncodingdataUsingEncoding:
NSString *str = @"hello";
NSData *data = [NSData dataWithBytes:str.UTF8String length:str.length];
str127 ට වඩා විශාල කේත ලකුණු අඩංගු වන විට මෙම පිළිතුර වැරදිය . මෙයට හේතුව str.lengthයුනිකෝඩ් අක්ෂර ගණන මිස බයිට් ගණන නොවේ. උදාහරණයක් ලෙස, එසේ strනම් @"にほんご", str.length4 ක් ලබා දෙන අතර str.UTF8Stringඇත්ත වශයෙන්ම බයිට් 12 ක් අඩංගු වේ. ඔබ වෙනුවට පවා නම් str.lengthවිසින් strlen(str.UTF8String), එය තවමත් කොහේ නඩුව සඳහා වැරදි වනු ඇත strඑවැනි ලෙස NULL චරිතය, අඩංගු වේ @"にほ\0んご".
පරමාර්ථය-සී:
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!
NSString *str = @"Banana";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:true];
පරමාර්ථය-සී
NSString *str = @"Hello World";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
ස්විෆ්ට්
let str = "Hello World"
let data = string.data(using: String.Encoding.utf8, allowLossyConversion: false)