ios 在 Objective c 中将 NSData 转换为 NSString
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6411965/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Converting NSData to NSString in Objective c
提问by Mehul Mistri
I want to convert NSData to NSString..What is the best way to do this?
我想的NSData转换为NSString..What是做到这一点的最好方法是什么?
I am using this code but the final string returns null
我正在使用此代码,但最终字符串返回 null
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
When I see console It will print null.
当我看到控制台时,它会打印 null。
采纳答案by Felipe Sabino
The docs for NSString
says
的文档NSString
说
https://developer.apple.com/documentation/foundation/nsstring/1416374-initwithdata
https://developer.apple.com/documentation/foundation/nsstring/1416374-initwithdata
Return Value An NSString object initialized by converting the bytes in data into Unicode characters using encoding. The returned object may be different from the original receiver. Returns nil if the initialization fails for some reason (for example if data does not represent valid data for encoding).
返回值 通过使用编码将数据中的字节转换为 Unicode 字符来初始化的 NSString 对象。返回的对象可能与原始接收者不同。如果由于某种原因初始化失败(例如,如果数据不代表有效的编码数据),则返回 nil。
You should try other encoding to check if it solves your problem
您应该尝试其他编码以检查它是否解决了您的问题
// 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
};
回答by Jhaliya
Use below code.
使用下面的代码。
NSString* myString;
myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
回答by Morten Fast
-[NSString initWithData:encoding]
will return nil
if the specified encoding doesn't match the data's encoding.
-[NSString initWithData:encoding]
nil
如果指定的编码与数据的编码不匹配,将返回。
Make sure your data is encoded in UTF-8 (or change NSUTF8StringEncoding to whatever encoding that's appropriate for the data).
确保您的数据以 UTF-8 编码(或将 NSUTF8StringEncoding 更改为适合数据的任何编码)。
回答by Nag Raj
NSString *string = [NSString stringWithUTF8String:[Data bytes]];
回答by Alexander Volkov
Objective C:
目标 C:
[[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
Swift:
迅速:
let str = String(data: data, encoding: .ascii)
回答by Bilal Khan
-[NSString initWithData:encoding]
is your friend but only when you use a proper encoding.
-[NSString initWithData:encoding]
是您的朋友,但前提是您使用正确的编码。
回答by Jess
Swift:
迅速:
let jsonString = String(data: jsonData, encoding: .ascii)
or .utf8
or whatever encoding appropriate
或.utf8
或任何适当的编码
回答by Albert Renshaw
Unsure of data's encoding type? No problem!
不确定数据的编码类型?没问题!
Without need to know potential encoding types, in which wrong encoding types will give you nil/null, this should cover all your bases:
无需知道潜在的编码类型,其中错误的编码类型将为您提供 nil/null,这应该涵盖您的所有基础:
NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
Done!
完毕!
Note: In the event this somehow fails, you can unpack your NSData with NSKeyedUnarchiver
, then repack the (id)unpacked
again via NSKeyedArchiver
, and that NSData form should be base64 encodeable.
注意:如果以某种方式失败,您可以使用 解压缩您的 NSData NSKeyedUnarchiver
,然后(id)unpacked
再次通过重新打包NSKeyedArchiver
,并且 NSData 表单应该是 base64 可编码的。
id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data];
data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];
回答by Ashok R
in objective C:
在目标 C 中:
NSData *tmpData;
NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData];
NSLog(tmpString)