在Objective c中将NSData转换为NSString

Meh*_*tri 83 iphone objective-c ipad ios

我想将NSData转换为NSString ..这是最好的方法吗?

我正在使用此代码,但最后一个字符串返回null

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

当我看到控制台它将打印null.

Jha*_*iya 86

使用以下代码.

NSString* myString;
myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
Run Code Online (Sandbox Code Playgroud)

  • 这不会给我正确的字符串 (9认同)
  • 如果没有,它不是'NSASCIIStringEncoding`.有关其他编码,请参阅[felipes answer](http://stackoverflow.com/questions/6411965/converting-nsdata-to-nsstring-in-objective-c/6412275#6412275) (3认同)

Fel*_*ino 46

文档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
};
Run Code Online (Sandbox Code Playgroud)


Mor*_*ast 15

-[NSString initWithData:encoding]nil如果指定的编码与数据的编码不匹配,则返回.

确保您的数据以UTF-8编码(或将NSUTF8StringEncoding更改为适合数据的任何编码).


Nag*_*Raj 6

NSString *string = [NSString stringWithUTF8String:[Data bytes]];
Run Code Online (Sandbox Code Playgroud)


Ale*_*kov 6

目标C:

[[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
Run Code Online (Sandbox Code Playgroud)

迅速:

let str = String(data: data, encoding: .ascii)
Run Code Online (Sandbox Code Playgroud)