Objective c에서 NSData를 NSString으로 변환


87

NSData를 NSString으로 변환하고 싶습니다.이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

이 코드를 사용하고 있지만 최종 문자열은 null을 반환합니다.

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

콘솔이 표시되면 null이 인쇄됩니다.


@Nik .... @Marvin : 당신은 같은 사람입니까 아니면 같은 LAN 내에서 왔습니까? 왜 당신의 identicon 이 정확히 같은지 궁금합니다 .
vikingosegundo

문자열은 무엇입니까? 당신이 얻는다면 당신 nil의 데이터가 유효한 utf8 문자열이 아닌 것 같아요?
deanWombourne 2011-06-20

내가 닉 모르겠어 ... 네 종류의 정보 @vikingosegundo
Mehul Mistri

가능성이 거의 없기 때문에 정말 재밌습니다. 그러나 여전히 가능합니다.
vikingosegundo

답변:


47

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
John Erck 2015

나는 lldb에서 숫자를 사용했습니다. 그렇지 않으면 작동하지 않았습니다. 감사.
Okhan Okbay

1
참고 : 당신은 당신의 인코딩 유형의 확신이나 항상 동일하지 않은 경우,이 방법은 당신을 위해 좋은 경우 : stackoverflow.com/a/50691430/2057171
알버트 렌쇼

94

아래 코드를 사용하십시오.

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

9
이것은 나에게 적절한 문자열을주지 않을 것입니다
Mehul

3
그렇지 않은 경우 NSASCIIStringEncoding. 참조 felipes 대답 다른 인코딩을위한
vikingosegundo

이 인코딩에 대해 NSUTF8StringEncoding은 nil을 제공합니다
Shauket Sheikh

15

-[NSString initWithData:encoding] 돌아올 것이다 nil지정된 인코딩이 데이터의 인코딩과 일치하지 않으면 됩니다.

데이터가 UTF-8로 인코딩되었는지 확인하십시오 (또는 NSUTF8StringEncoding을 데이터에 적합한 인코딩으로 변경하십시오).


이미지를 NSdata로 변환하고 NSUTF8StringEncoding을 사용하여 NSdata를 다시 문자열로 변환했습니다. 그러나 그것은 0을 보여주고 있습니다.
Ramakrishna 2016 년

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

1
설명 된대로 작동하지 않습니다. [[NSString alloc] initWithData : head encoding : NSUTF8StringEncoding] 작동
Ryan Heitner

2

-[NSString initWithData:encoding] 친구이지만 적절한 인코딩을 사용할 때만 가능합니다.


2

목표 C :

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

빠른:

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

1

빠른:

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

또는 .utf8적절한 인코딩


1

데이터의 인코딩 유형이 확실하지 않습니까? 문제 없어요!

잘못된 인코딩 유형이 nil / null을 제공하는 잠재적 인 인코딩 유형을 알 필요없이 모든 기본을 포함해야합니다.

NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];

끝난!




참고 :이 어떻게 든 실패 할 경우, 당신은 당신의있는 NSData를 풀 수 NSKeyedUnarchiver 후 재 포장, (id)unpacked통해 다시 NSKeyedArchiver하고있는 NSData 형태는 base64로 encodeable해야한다고.

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

0

목표 C에서 :

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

이것은 잘못된 것입니다, 그것은 다음과 같은 것을 반환 할 것이고 {length = XX, bytes = 0xYYYYYYYY}나는 질문이 그들의 설명이 아닌 원시 바이트로부터 인코딩 된 문자열을
풀기위한

0

Objective C에는 NSData에 포함 된 문자열의 인코딩을 감지하는 기본 제공 방법이 포함되어 있습니다.

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

NSString* string;
NSStringEncoding encoding = [NSString stringEncodingForData:data encodingOptions:nil convertedString:&string usedLossyConversion:nil];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.