এনএসডিটা কে এনএসএসট্রিংকে উদ্দেশ্যমূলক রূপে রূপান্তর করা গ


87

আমি NSData কে NSString এ রূপান্তর করতে চাই..এটি করার সর্বোত্তম উপায় কোনটি?

আমি এই কোডটি ব্যবহার করছি তবে চূড়ান্ত স্ট্রিংটি বাতিল হয়ে যায়

NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);

আমি যখন কনসোল দেখি এটি নাল মুদ্রণ করবে।


@ নিক .... @ মারভিন: আপনি কি একই ব্যক্তি বা একই লনের মধ্যে থেকে? আমি শুধু ভাবছি, কেন আপনার পরিচয়গুলি একই রকম।
ভাইকিংগুন্ডো

স্ট্রিং কি? আপনি যদি তা পান nilতবে আমি অনুমান করি যে আপনার ডেটা কোনও বৈধ utf8 স্ট্রিং নয়?
ডিনবম্বর্ন

@ লাইকিংগুন্ডো আপনার ধরণের তথ্যের জন্য আমি নিক জানি না ...
মেহুল মিস্ত্রি

এটি সত্যিই মজার, কারণ এটি অত্যন্ত অসম্ভব। তবে এখনও সম্ভব।
ভাইকিংগুন্ডো

উত্তর:


47

দস্তাবেজের জন্য NSStringবলেছেন

https://developer.apple.com/docamentation/foundation/nsstring/1416374-initwithdata

রিটার্ন মান একটি এনএসএস স্ট্রিং অবজেক্টটি এনকোডিং ব্যবহার করে ডেটাতে বাইটগুলি ইউনিকোড অক্ষরে রূপান্তর করে শুরু করা হয়। প্রত্যাবর্তিত বস্তুটি মূল রিসিভারের চেয়ে আলাদা হতে পারে। যদি কোনও কারণে সূচনা ব্যর্থ হয় তবে শূন্য দেয় (উদাহরণস্বরূপ যদি ডেটা এনকোডিংয়ের জন্য বৈধ ডেটা উপস্থাপন করে না)।

এটি আপনার সমস্যা সমাধান করে কিনা তা পরীক্ষা করার জন্য আপনার অন্যান্য এনকোডিং চেষ্টা করা উচিত

 // The following constants are provided by NSString as possible string encodings.
enum {
   NSASCIIStringEncoding = 1,
   NSNEXTSTEPStringEncoding = 2,
   NSJapaneseEUCStringEncoding = 3,
   NSUTF8StringEncoding = 4,
   NSISOLatin1StringEncoding = 5,
   NSSymbolStringEncoding = 6,
   NSNonLossyASCIIStringEncoding = 7,
   NSShiftJISStringEncoding = 8,
   NSISOLatin2StringEncoding = 9,
   NSUnicodeStringEncoding = 10,
   NSWindowsCP1251StringEncoding = 11,
   NSWindowsCP1252StringEncoding = 12,
   NSWindowsCP1253StringEncoding = 13,
   NSWindowsCP1254StringEncoding = 14,
   NSWindowsCP1250StringEncoding = 15,
   NSISO2022JPStringEncoding = 21,
   NSMacOSRomanStringEncoding = 30,
   NSUTF16StringEncoding = NSUnicodeStringEncoding,
   NSUTF16BigEndianStringEncoding = 0x90000100,
   NSUTF16LittleEndianStringEncoding = 0x94000100,
   NSUTF32StringEncoding = 0x8c000100,
   NSUTF32BigEndianStringEncoding = 0x98000100,
   NSUTF32LittleEndianStringEncoding = 0x9c000100,
   NSProprietaryStringEncoding = 65536
};

NSASCIIStringEncoding
জন এর্ক

আমি এলএলডিবিতে নম্বরগুলি ব্যবহার করেছি। অন্যথায় এটি কাজ করে না। ধন্যবাদ
ওখন ওকবা

4
নোট: আপনি আপনার এনকোডিং ধরনের নিশ্চিত না বা যদি এটি সবসময় একই নয়, এই পদ্ধতির তোমার জন্য ভাল হবে এমন: stackoverflow.com/a/50691430/2057171
আলবার্ট Renshaw

94

কোড নীচে ব্যবহার করুন।

NSString* myString;
myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];

9
এটি আমাকে সঠিক স্ট্রিং দেয় না
মেহুল মিস্ত্রি

4
যদি না হয়, তা নয় NSASCIIStringEncoding। অন্যান্য এনকোডিংয়ের জন্য ফিলিপস উত্তরটি দেখুন
ভাইকিংগুন্ডো

এই এনকোডিংয়ের জন্য এনএসইউটিএফ 8 স্ট্রিংএনকোডিং শূন্য করছে
শওকেত শেখ

15

-[NSString initWithData:encoding]nilযদি নির্দিষ্ট এনকোডিংটি ডেটার এনকোডিংয়ের সাথে মেলে না তবে ফিরে আসবে ।

আপনার ডেটাটি ইউটিএফ -8 এ এনকোড রয়েছে তা নিশ্চিত করুন (বা তথ্যের জন্য উপযুক্ত এনকোডিংটিতে এনএসইউটিএফ 8 স্ট্রিংএকনডিং পরিবর্তন করুন)।


আমি একটি চিত্রকে এনএসটাটাতে রূপান্তর করেছি এবং আবার এনএসডাটা NSUTF8 স্ট্রিংইনকোডিং ব্যবহার করে স্ট্রিংয়ে রূপান্তর করেছি। কিন্তু এটি শূন্য দেখাচ্ছে।
রামকৃষ্ণ


2

-[NSString initWithData:encoding] আপনার বন্ধু তবে আপনি যখন সঠিক এনকোডিং ব্যবহার করেন কেবল তখনই।



1

দ্রুত:

let jsonString = String(data: jsonData, encoding: .ascii)

বা .utf8যা কিছু এনকোডিং উপযুক্ত


1

ডেটার এনকোডিং প্রকারের সুরক্ষা? সমস্যা নেই!

সম্ভাব্য এনকোডিং প্রকারগুলি জানা দরকার নেই, যাতে ভুল এনকোডিং প্রকারগুলি আপনাকে শূন্য / নাল দেয়, এটিতে আপনার সমস্ত ঘাঁটি আবরণ করা উচিত:

NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];

সম্পন্ন!




দ্রষ্টব্য: ইভেন্টটি যদি কোনওভাবে ব্যর্থ হয় তবে আপনি আপনার এনএসডাটাটি আনপ্যাক করতে পারবেন NSKeyedUnarchiver , তারপরে (id)unpackedআবার পুনরায় চেক করুন NSKeyedArchiverএবং এনএসডিটা ফর্মটি বেস 64 এ এনকোডেবল হতে হবে।

id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data];
data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];

0

উদ্দেশ্য সি:

NSData *tmpData;
NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData];
NSLog(tmpString)

এটি একটি ভুল, এটির মতো কিছু ফিরে আসবে {length = XX, bytes = 0xYYYYYYYY}এবং আমি
ধরেই

0

উদ্দেশ্য সিতে এনএসডাটা এমবেড থাকা স্ট্রিংয়ের এনকোডিং সনাক্ত করার জন্য অন্তর্নির্মিত উপায় অন্তর্ভুক্ত।

NSData* data = // Assign your NSData object...

NSString* string;
NSStringEncoding encoding = [NSString stringEncodingForData:data encodingOptions:nil convertedString:&string usedLossyConversion:nil];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.