programing

목표 c에서 NSData를 NSString으로 변환

goodsources 2023. 7. 30. 17:43
반응형

목표 c에서 NSData를 NSString으로 변환

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

반환 값 인코딩을 사용하여 데이터의 바이트를 유니코드 문자로 변환하여 초기화된 NSString 개체입니다.반환된 개체는 원래 수신기와 다를 수 있습니다.어떤 이유로 초기화가 실패한 경우(예: 데이터가 인코딩에 유효한 데이터를 나타내지 않는 경우) 0을 반환합니다.

다른 인코딩을 사용하여 문제가 해결되는지 확인해야 합니다.

 // 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을 데이터에 적합한 인코딩으로 변경).

목표 C:

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

스위프트:

let str = String(data: data, encoding: .ascii)
NSString *string = [NSString stringWithUTF8String:[Data bytes]];

-[NSString initWithData:encoding]사용자의 친구이지만 올바른 인코딩을 사용해야 합니다.

스위프트:

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

또는.utf8또는 적절한 인코딩이 무엇이든.

데이터의 인코딩 유형을 잘 모르시겠습니까?문제없습니다!

잘못된 인코딩 유형으로 인해 0/null이 발생할 수 있는 잠재적인 인코딩 유형을 알 필요 없이 모든 기본을 포함해야 합니다.

NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];

알았어!




참고: 이 작업이 실패할 경우 NSD 데이터의 압축을 풀 수 있습니다.NSKeyedUnarchiver 그런 다음 다시 포장합니다.(id)unpacked경유하여 다시NSKeyedArchiverNSData 양식은 base64 인코딩이 가능해야 합니다.

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

목표 C에는 NSData에 포함된 문자열 인코딩을 탐지하는 내장된 방법이 포함되어 있습니다.

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

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

목표 C:

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

언급URL : https://stackoverflow.com/questions/6411965/converting-nsdata-to-nsstring-in-objective-c

반응형