NSData를 NSString으로 변환하고 싶습니다.이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
이 코드를 사용하고 있지만 최종 문자열은 null을 반환합니다.
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
콘솔이 표시되면 null이 인쇄됩니다.
NSData를 NSString으로 변환하고 싶습니다.이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
이 코드를 사용하고 있지만 최종 문자열은 null을 반환합니다.
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
콘솔이 표시되면 null이 인쇄됩니다.
nil
의 데이터가 유효한 utf8 문자열이 아닌 것 같아요?
답변:
NSString
말한다에 대한 문서
https://developer.apple.com/documentation/foundation/nsstring/1416374-initwithdata
반환 값 인코딩을 사용하여 데이터의 바이트를 유니 코드 문자로 변환하여 초기화 된 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
};
NSASCIIStringEncoding
아래 코드를 사용하십시오.
NSString* myString;
myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
NSASCIIStringEncoding
. 참조 felipes 대답 다른 인코딩을위한
-[NSString initWithData:encoding]
돌아올 것이다 nil
지정된 인코딩이 데이터의 인코딩과 일치하지 않으면 됩니다.
데이터가 UTF-8로 인코딩되었는지 확인하십시오 (또는 NSUTF8StringEncoding을 데이터에 적합한 인코딩으로 변경하십시오).
NSString *string = [NSString stringWithUTF8String:[Data bytes]];
잘못된 인코딩 유형이 nil / null을 제공하는 잠재적 인 인코딩 유형을 알 필요없이 모든 기본을 포함해야합니다.
NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
끝난!
참고 :이 어떻게 든 실패 할 경우, 당신은 당신의있는 NSData를 풀 수 NSKeyedUnarchiver
후 재 포장, (id)unpacked
통해 다시 NSKeyedArchiver
하고있는 NSData 형태는 base64로 encodeable해야한다고.
id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data];
data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];