簡體   English   中英

在 Objective c 中將 NSData 轉換為 NSString

[英]Converting NSData to NSString in Objective c

我想將 NSData 轉換為 NSString .. 最好的方法是什么?

我正在使用此代碼,但最終字符串返回 null

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

當我看到控制台時,它會打印 null。

使用下面的代碼。

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

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 initWithData:encoding]如果指定的編碼與數據的編碼不匹配,將返回nil

確保您的數據以 UTF-8 編碼(或將 NSUTF8StringEncoding 更改為適合數據的任何編碼)。

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

目標 C:

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

迅速:

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

-[NSString initWithData:encoding]是你的朋友,但-[NSString initWithData:encoding]是你使用了正確的編碼。

迅速:

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

.utf8或任何適當的編碼

不確定數據的編碼類型? 沒問題!

無需知道潛在的編碼類型,其中錯誤的編碼類型會給您零/空,這應該涵蓋您的所有基礎:

NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];

完畢!




注意:如果這以某種方式失敗,您可以使用NSKeyedUnarchiver解壓縮您的 NSData,然后通過NSKeyedArchiver重新打包(id)unpacked ,並且 NSData 表單應該是 base64 編碼的。

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

在目標 C 中:

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

Objective C 包含一種內置方法來檢測嵌入在 NSData 中的字符串的編碼。

NSData* data = // Assign your NSData object...

NSString* string;
NSStringEncoding encoding = [NSString stringEncodingForData:data encodingOptions:nil convertedString:&string usedLossyConversion:nil];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM