web-dev-qa-db-ja.com

Objective cでNSDataをNSStringに変換する

NSDataをNSStringに変換したいのですが、これを行う最善の方法は何ですか?

私はこのコードを使用していますが、最終的な文字列はnullを返します

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

コンソールが表示されると、nullが出力されます。

83
Mehul Mistri

NSStringのドキュメントには

https://developer.Apple.com/documentation/foundation/nsstring/1416374-initwithdata

戻り値エンコードを使用してデータのバイトをUnicode文字に変換することにより初期化されたNSStringオブジェクト。返されるオブジェクトは、元の受信者と異なる場合があります。何らかの理由で初期化が失敗した場合(たとえば、データがエンコードに有効なデータを表していない場合)、nilを返します。

他のエンコーディングを試して、問題が解決するかどうかを確認する必要があります

 // 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
};
46
Felipe Sabino

以下のコードを使用します。

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

指定されたエンコードがデータのエンコードと一致しない場合、-[NSString initWithData:encoding]nilを返します。

データがUTF-8でエンコードされていることを確認してください(またはNSUTF8StringEncodingをデータに適したエンコードに変更してください)。

15
Morten Fast
NSString *string = [NSString stringWithUTF8String:[Data bytes]];
6
Nag Raj

-[NSString initWithData:encoding]は友達ですが、適切なエンコードを使用している場合に限ります。

2
Bilal Khan

objective Cの場合:

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

データのエンコードタイプが不明ですか?問題ない!

エンコードタイプが間違っているとnil/nullになる可能性のあるエンコードタイプを知る必要はありませんが、これはすべてのベースをカバーするはずです。

NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];

完了!




注:これが何らかの形で失敗した場合、NSKeyedUnarchiverでNSDataをアンパックし、NSKeyedArchiverを介して(id)unpackedを再パックし、NSDataフォームbase64エンコード可能にする必要があります

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

目標C:

[[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];

迅速:

let str = String(data: data, encoding: .ascii)
1

迅速:

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

または.utf8または適切なエンコード

0
Jess