在目标c中将NSData转换为NSString

我想将NSData转换为NSString ..什么是这样做的最好方法?

我正在使用这个代码,但最终的string返回null

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

当我看到控制台它将打印空。

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 }; 

使用下面的代码。

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

-[NSString initWithData:encoding]如果指定的编码不符合数据的编码, -[NSString initWithData:encoding]将返回nil

确保你的数据是用UTF-8编码的(或者把NSUTF8StringEncoding改成适合数据的任何编码)。

 NSString *string = [NSString stringWithUTF8String:[Data bytes]]; 

-[NSString initWithData:encoding]是你的朋友,但只有当你使用正确的编码。

目标C:

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

迅速:

 let str = String(data: data, encoding: NSUTF8StringEncoding) 

在目标C中:

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

迅速:

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

.utf8或任何适当的编码