iOS 7 이상에서 Base64 디코딩


184

iOS7에 추가 된 Class new API를 NSString사용하여 text ( )를 인코딩 NSData했습니다.

이것을 사용하여

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding;  

여기 내 코드가 있습니다

NSString *base64EncodedString = [[myText dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0];

NSLog(@"%@", base64EncodedString);

나는 그것을 해독하려고합니다.


7
m_EncodeText: 중지하십시오
Carl Veazey

1
어디서 찾았 base64EncodedStringWithOptions:습니까?
user2159978

@ user2159978 그것은 애플 문서에 있습니다 developer.apple.com/library/ios/documentation/cocoa/reference/…
Sandeep Khade

Mac OS 콘솔 응용 프로그램 대상을 사용할 때 발생하는 것 같습니다. 또는 sdk / mac os 대상의 이전 버전
user2159978

답변:


438

스위프트 3+

let plainString = "foo"

부호화

let plainData = plainString.data(using: .utf8)
let base64String = plainData?.base64EncodedString()
print(base64String!) // Zm9v

디코딩

if let decodedData = Data(base64Encoded: base64String!),
   let decodedString = String(data: decodedData, encoding: .utf8) {
  print(decodedString) // foo
}

스위프트 <3

let plainString = "foo"

부호화

let plainData = plainString.dataUsingEncoding(NSUTF8StringEncoding)
let base64String = plainData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
print(base64String!) // Zm9v

디코딩

let decodedData = NSData(base64EncodedString: base64String!, options: NSDataBase64DecodingOptions(rawValue: 0))
let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding)
print(decodedString) // foo

목표 -C

NSString *plainString = @"foo";

부호화

NSData *plainData = [plainString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [plainData base64EncodedStringWithOptions:0];
NSLog(@"%@", base64String); // Zm9v

디코딩

NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
NSLog(@"%@", decodedString); // foo 


1
이 코드가 깨끗하지 않다고 생각합니다. "NSData의 표현식으로 NNSTring을 초기화하는 호환되지 않는 포인터 유형"
drlobo

9
@drlobo 당신은 base64EncodedStringWithOptions 대신에 base64EncodedDataWithOptions :를 입력해야합니다 :
Bach

4
고마워 방금 찾은 것 : 상수 kNilOptions는 0과 같으며 옵션에 0을 사용하는 것보다 더 읽기 쉽습니다.
Adam Waite

2
@AdamWaite kNilOptionsMacTypes.h레거시 OSX 헤더 로 정의 되므로 헤더를 iOS SDK에서 모두 제거해야한다고 생각하기 때문에 사용하지 않는 것이 좋습니다. 어쨌든, 당신은 그것을 매우 읽기 쉽다는 말이 있습니다. 자유롭게 사용하십시오.
Gabriele Petronella

2
누군가가 시도하지 않으면 NSDataBase64DecodingOptions.IgnoreUnknownCharacters나는이 문제가 있었다
spaceMonkey

81

폴백 코드를 작성하려는 경우, base64로부터의 디코딩은 iOS의 초기부터 조심스럽게 시작되었습니다 NSURL.

NSURL *URL = [NSURL URLWithString:
      [NSString stringWithFormat:@"data:application/octet-stream;base64,%@",
           base64String]];

return [NSData dataWithContentsOfURL:URL];

12
이 답변에 완전히 감동했습니다. 몇 년 동안 나는 문자열을 해독하기 위해 어리석은 양의 코드를 사용해 왔으며, 2 줄 솔루션이있었습니다.
AlBeebe

대단해! Hacky, awesome :)
Micha Mazaheri

나는 그렇게 쉽다고 생각한 적이 없다! 감사!!
Kumar C
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.