কীভাবে আমি এনএসডিটার মানকে এনএসডিটাতে রূপান্তর করব?


উত্তর:


1418
NSString* str = @"teststring";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];

ইউটিএফ -8 বা ইউটিএফ -32 এর মতো উচ্চতর কিছুটির বিপরীতে ইউটিএফ -8 ব্যবহার করার পক্ষে কি কি?
অ্যালবার্ট রেনশওয়া 13'14

4
এটি ইউটিএফ -8 বা ইউটিএফ -16 বা ইউটিএফ -32 কিনা সে বিষয়ে এনএসডাটা খুব বেশি যত্ন করে না। দুটি সমস্যা রয়েছে: একটি, ইউটিএফ -16 এবং ইউটিএফ -32 এর সঠিক বাইট-ক্রম হওয়া দরকার। দ্বিতীয়ত, যে কেউ এটিকে এনএসএসস্ট্রিং * এ রূপান্তর করে * অবশ্যই এনকোডিংটি জানতে হবে এবং প্রায়শই ইউটিএফ -8 এনকোডিং গ্রহণ করবে। সাধারণত, ইউটিএফ -8 সম্ভবত সঠিকভাবে পরিচালিত হয়।
gnasher729

1
@ বেন্ডাইট্রি আসলে এটি করেন না, -ডাটা ইউসিং এনকোডিং: একটি নন-নল-টার্মিনেটেড স্ট্রিং ফিরিয়ে দেবে যা স্ট্রিংউইথএফ 8 স্ট্রিংয়ের প্রয়োজন: আপনি চাইছেন না এমন মেমরি পড়ার সীমা রয়েছে। এটিকে কী রূপান্তরিত করে তা হ'ল: -ইনটিউথডেটা: এনকোডিং:।
সাইকো

1
@ অ্যালবার্ট রেনশো বর্তমানে (এইভাবে থাকার কোনও গ্যারান্টি নেই) NSStringঅভ্যন্তরীণভাবে ইউটিএফ -16 ব্যবহার করে যাতে কিছুটা পারফরম্যান্স লাভ হতে পারে কারণ এটি কোনও ইউটিএফ -16 <-> ইউটিএফ -8 রূপান্তর করতে হবে না। ব্যক্তিগতভাবে, আমরা (@ gnasher729 হিসাবে প্রস্তাবিত) পারফরম্যান্সের চেয়ে দৃ rob়তা এবং সর্বত্র ইউটিএফ -8 ব্যবহার করি।
কিছু বিকাশকারী

66
NSString *str = @"helowrld";
// This converts the string to an NSData object
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

আপনি এই লিঙ্ক থেকে রেফারেন্স নিতে পারেন


3
একটি লাইনারের সমাধান:NSData *data = [@"helowrld" dataUsingEncoding:NSUTF8StringEncoding];
র‌্যাটার

32

না:

NSData *data = [yourString dataUsingEncoding:NSUTF8StringEncoding];

তারপর এগিয়ে বিনা দ্বিধায় NSJSONSerialization:JSONObjectWithData


NULL টার্মিনেটর সম্পর্কিত উত্তরের সংশোধন

মন্তব্যগুলি, অফিসিয়াল ডকুমেন্টেশন এবং যাচাইয়ের পরে , এই উত্তরটি কোনও অভিযোগযুক্ত এনএইউএল টার্মিনেটর অপসারণ সম্পর্কিত আপডেট করা হয়েছিল:

  1. ডেটা ইউজিং এনকোডিং দ্বারা নথিযুক্ত হিসাবে :

    ফেরত মূল্য

    dataUsingEncoding:allowLossyConversion:দ্বিতীয় যুক্তি হিসাবে NO এর সাথে প্রার্থনা করার ফলাফল

  2. যেমন getCString দ্বারা ডকুমেন্ট করা হয়েছে: সর্বোচ্চ দৈর্ঘ্য: এনকোডিং: এবং সিস্ট্রিংইউজিং এনকোডিং ::

    মনে রাখবেন যে ফিরিয়ে দেওয়া ডেটা dataUsingEncoding:allowLossyConversion:কোনও কঠোর সি-স্ট্রিং নয় কারণ এতে কোনও NULL টার্মিনেটর নেই


14
এটা ভুল! দয়া করে আমার পোস্ট এখানে দেখুন: stackoverflow.com/q/14087094/192819
jpswain

4
হা. dataUsingEncoding:নাল-সমাপ্ত ডেটা ফেরত দেয় না। কেবল UTF8Stringএবং অন্যান্য পদ্ধতিগুলি যা একটি সি স্ট্রিং দেয় একটি নাল-টার্মিনেটেড স্ট্রিং দেয়।
পিটার হোসি

@ পিটারহোসে এর জন্য আপনার কি কোনও উত্স আছে? যে কোনও ডক্সে এটি খুঁজে পেতে আমার বেশ কষ্ট হচ্ছে।
shorttuffsushi

1
ধন্যবাদ @PeterHosey, দস্তাবেজ আপনি লিঙ্ক আছে কি স্পষ্টভাবে শূন্য পরিসমাপ্তি অভাব রাষ্ট্র - (note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator)। আমি অবশ্যই এটি আগে মিস করেছি আমি ভবিষ্যতে কিছু লিখতে হবে নিশ্চিত, যদিও।
shorttuffsushi

1
(যারা হতাশ এর জন্য: shortstuffsushi এর উদ্ধৃতি বয়সী cStringUsingEncoding:আমি অধীনে খুঁজছিলাম। dataUsingEncoding:।)
পিটার Hosey

20

সুইফট বিকাশকারী এখানে আসার ক্ষেত্রে,

এনএসএসটিং / স্ট্রিং থেকে এনএসডিটাতে রূপান্তর করতে

var _nsdata = _nsstring.dataUsingEncoding(NSUTF8StringEncoding)

18

উদ্দেশ্য গ:

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

সম্ভবত অন্যান্য পদ্ধতির তুলনায় প্রসেসর-নিবিড়, তবে আপনি যদি অধ্যবসায়ের জন্য ফাইল সিস্টেমে অ্যাক্সেস করতে চান তবে খুব দরকারী
স্টিফেন জে

10

প্রথমত, আপনি dataUsingEncoding:অতিক্রম করার পরিবর্তে ব্যবহার করা উচিত UTF8String। আপনি কেবল UTF8Stringতখনই ব্যবহার করবেন যখন আপনার Cসেই এনকোডিংয়ের একটি স্ট্রিং দরকার ।

তারপরে, UTF-16কেবল আপনার বার্তার NSUnicodeStringEncodingপরিবর্তে পাস করুন।NSUTF8StringEncodingdataUsingEncoding:


7

সুইফ্ট 3 এর জন্য, আপনি বেশিরভাগই থেকে পরিবর্তিত Stringহবেন Data

let myString = "test"
let myData = myString.data(using: .utf8)
print(myData) // Optional(Data)

6
NSString *str = @"hello";
NSData *data = [NSData dataWithBytes:str.UTF8String length:str.length];

5
এই উত্তরটি ভুল যখন str127 এর চেয়ে বড় কোড পয়েন্ট থাকে This এটি কারণ str.lengthইউনিকোড অক্ষরের সংখ্যা দেয়, বাইটের সংখ্যাটি দেয় না। উদাহরণস্বরূপ, যদি strহয় @"にほんご", str.length4 দেয় যখন str.UTF8Stringআসলে 12 বাইট ধারণ করে। এমনকি যদি আপনি প্রতিস্থাপন str.lengthদ্বারা strlen(str.UTF8String), এটা এখনও ক্ষেত্রে যেখানে জন্য ভুল হবে strযেমন শূন্য অক্ষর রয়েছে @"にほ\0んご"
পাইং

এইভাবে তৈরি করা একটি এনএসডিটা অবজেক্ট [এনএসজেএসএসনারাইজেশন জেসনঅবজেক্টবিথডাটা: ডেটা অপশনগুলি: এনএসজেএসনরাইডিং মিউটেবললাইভ ত্রুটি: & ত্রুটি] এর সাথে ব্যবহার করার সময় এক্সপশন নিক্ষেপ করবে;
অ্যাডোবেল

2

উদ্দেশ্য গ:

এনএসডিটা এনএসডিটারিং:

NSString* str= @"string";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];

এনএসডিটা থেকে এনএসএসটারিং:

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!


0

উদ্দেশ্য গ

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.