जवाबों:
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 के साथ आह्वान का परिणाम है
जैसा कि getCString द्वारा प्रलेखित: अधिकतम गति: एन्कोडिंग: और cStringUsingEncoding ::
ध्यान दें कि डेटा द्वारा लौटाया गया
dataUsingEncoding:allowLossyConversion:एक सख्त सी-स्ट्रिंग नहीं है क्योंकि इसमें NULL टर्मिनेटर नहीं है
dataUsingEncoding:अशक्त डेटा वापस नहीं करता है। केवल UTF8Stringऔर अन्य विधियाँ जो C स्ट्रिंग लौटाती हैं, अशक्त-समाप्त स्ट्रिंग लौटाती हैं।
(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 / स्ट्रिंग से 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.length4 देता है, जबकि str.UTF8Stringवास्तव में 12 बाइट का है। यहां तक कि अगर आप str.lengthद्वारा प्रतिस्थापित करते हैं strlen(str.UTF8String), तब भी यह उस मामले के लिए गलत होगा जहां strNULL वर्ण शामिल है, जैसे @"にほ\0んご"।
उद्देश्य सी:
NSData को NSString:
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)