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
සම්මත කරන්න .NSUnicodeStringEncoding
NSUTF8StringEncoding
dataUsingEncoding:
NSString *str = @"hello";
NSData *data = [NSData dataWithBytes:str.UTF8String length:str.length];
str
127 ට වඩා විශාල කේත ලකුණු අඩංගු වන විට මෙම පිළිතුර වැරදිය . මෙයට හේතුව str.length
යුනිකෝඩ් අක්ෂර ගණන මිස බයිට් ගණන නොවේ. උදාහරණයක් ලෙස, එසේ str
නම් @"にほんご"
, str.length
4 ක් ලබා දෙන අතර 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)