Saya ingin mengkonversi NSData ke NSString..Apa cara terbaik untuk melakukan ini?
Saya menggunakan kode ini tetapi string terakhir mengembalikan null
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
Ketika saya melihat konsol Ini akan mencetak null.
iphone
objective-c
ios
ipad
Mehul Mistri
sumber
sumber
nil
maka saya kira data Anda bukan string utf8 yang valid?Jawaban:
Dokumen untuk
NSString
katahttps://developer.apple.com/documentation/foundation/nsstring/1416374-initwithdata
Anda harus mencoba pengkodean lain untuk memeriksa apakah itu menyelesaikan masalah Anda
// 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 };
sumber
NSASCIIStringEncoding
Gunakan kode di bawah ini.
NSString* myString; myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
sumber
NSASCIIStringEncoding
. lihat jawaban felipes untuk pengkodean lainnya-[NSString initWithData:encoding]
akan kembalinil
jika pengkodean yang ditentukan tidak cocok dengan pengkodean data.Pastikan data Anda dienkode dalam UTF-8 (atau ubah NSUTF8StringEncoding menjadi encoding apa pun yang sesuai untuk data tersebut).
sumber
NSString *string = [NSString stringWithUTF8String:[Data bytes]];
sumber
-[NSString initWithData:encoding]
adalah teman Anda, tetapi hanya jika Anda menggunakan pengkodean yang tepat.sumber
Tujuan C:
[[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
Cepat:
sumber
Cepat:
atau
.utf8
atau pengkodean apa pun yang sesuaisumber
Tidak yakin dengan jenis pengkodean data? Tidak masalah!
Tanpa perlu mengetahui jenis pengkodean potensial, di mana jenis pengkodean yang salah akan memberi Anda nil / null, ini harus mencakup semua basis Anda:
NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
Selesai!
Catatan: Dalam hal ini entah bagaimana gagal, Anda dapat membongkar NSData Anda dengan
NSKeyedUnarchiver
, lalu mengemas(id)unpacked
ulang melaluiNSKeyedArchiver
, dan formulir NSData harus dapat dienkode dengan base64.id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data]; data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];
sumber
NSData *tmpData; NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData]; NSLog(tmpString)
sumber
{length = XX, bytes = 0xYYYYYYYY}
dan saya berasumsi pertanyaannya adalah bagaimana membuka bungkus string yang disandikan dari byte mentah, bukan deskripsi merekaObjective C menyertakan cara built-in untuk mendeteksi encoding dari string yang tertanam di NSData.
NSData* data = // Assign your NSData object... NSString* string; NSStringEncoding encoding = [NSString stringEncodingForData:data encodingOptions:nil convertedString:&string usedLossyConversion:nil];
sumber