जवाबों:
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.length
4 देता है, जबकि str.UTF8String
वास्तव में 12 बाइट का है। यहां तक कि अगर आप str.length
द्वारा प्रतिस्थापित करते हैं strlen(str.UTF8String)
, तब भी यह उस मामले के लिए गलत होगा जहां str
NULL वर्ण शामिल है, जैसे @"にほ\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)