2017-07-04 39 views
3

私はIOSで新しく、私はWebサービスからBase64データを受け取るプロジェクトを作っています。 Base64のデータを文字列に変換する方法と、pdfビューを開く方法と、そこにあるPDF所有者アプリケーションがiPhoneにインストールされているかどうかを確認してください。そして、文字列swiftでNSDATAを変換する方法を知りたい場合。 例これは、Base64データ JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdGVyIC9GbGF0ZURlY29kZT4 + CnN0cmVhbQp4nLVcza8ct5GH1rK9ejIU24lkO5GtJ8vWm5E87eY3uXtbYLHAYi8JdItySrABAjhA8v8fUuwmu35kF2fmxbsWDMxjk8VisapYX + TfbudJ6ds5/6Sこのよう// VJBase64データとNSDataを文字列に変換する方法

がNSDataのある < 25504446 2d312e34 0a25c7ec 8fa20a35 2030206f 626a0a3c 3c2f4c65 6e677468 20362030 20522f46 696c7465 72202f46 6c617465 4465636f 64653e3e 0a737472 65616d0a 789cb55c cdaf1cb7 9187d6b2 bd7a3214 db89643b 91ad27cb d69b913cであるように

答えて

1

からBase64からDataからStringまで。 Base64からNSDataからString

let base64String = "dGhpcyBpcyBmb3IgdGVzdGluZw==" 
if let data = Data(base64Encoded: base64String) { 
    if let string = String(data: data, encoding: .utf8) { 
     print(string) 
    } 
} 

let data = NSData(base64Encoded: base64String, options: .ignoreUnknownCharacters) 
    var string = String(data: data, encoding: .utf8) 
} 
+0

データをさせた場合=データ(base64Encoded:base64String){ VAR列=文字列(データ:データ、エンコーディング:.utf8) }このコード文字列変数の –

+0

は、nil –

+0

を出力します。これは、Base64からNSData to Stリング。 –

0

スウィフト3.0

文字列の便利な拡張機能。希望があなたを助けます。

extension String { 

    func fromBase64() -> String? { 
     guard let data = Data(base64Encoded: self) else { 
      return nil 
     } 

     return String(data: data, encoding: .utf8) 
    } 

    func toBase64() -> String { 
     return Data(self.utf8).base64EncodedString() 
    } 
} 
0

この質問には2つの部分があります。最初に、基本64文字列をData/NSDataに変換します。しかし、あなたはすでにそれをしているので、あなたはそこに助けを必要としません。

第2に、Data/NSDataを文字列に変換します。しかし、そのファイルを注意深く見ると、データはPDFファイルであり、テキスト文字列ではありません。例えば、場合、私は、ファイルとしてバイナリエディタでそれを見ていることをセーブ、私はそれがPDFだはっきり見ることができます。

hex dump

あなたは単なる文字列にそのPDFバイナリデータを変換することはできません。実際には、複雑なバイナリデータであるため、最初はbase64でエンコードされていました。

ただし、ファイルに保存したPDFファイルをプレビューするには、UIDocumentInteractionControllerを使用します。例えば


// convert base 64 string to data 

let base64 = "JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdGVyIC9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nLVcza8ct5GH1rK9ejIU24lkO5GtJ8vWm5E87eY3uXtbYLHAYi8JdItySrABAjhA8v8fUuwmu35kF2fmxbsWDMxjk8VisapYX+TfbudJ6ds5/6s/" 
guard let data = Data(base64Encoded: base64) else { 
    print("unable to convert base 64 string to data") 
    return 
} 

// given the data was PDF, let's save it as such 

let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) 
    .appendingPathComponent("test.pdf") 
try! data.write(to: fileURL) 

// if it was a string, you could convert the data to string, but this will fail 
// because the data is a PDF, not a text string 
// 
// guard let string = String(data: data, encoding: .utf8) else { 
//  print("Unable to convert data into string") 
//  return 
// } 
// print(string) 

// So, instead, let's use `UIDocumentInteractionController` to preview the PDF: 

let controller = UIDocumentInteractionController(url: fileURL) 
controller.delegate = self 
controller.presentPreview(animated: true) 

場合、ビューコントローラはUIDocumentInteractionControllerDelegateに準拠:

extension ViewController: UIDocumentInteractionControllerDelegate { 

    func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController { 
     return self 

     // or, if this view controller is already in navigation controller, don't 
     // return `self`, like above, but instead return the navigation controller itself 
     // 
     // return navigationController! 
    } 

} 
+0

Base64をpdfに変換する方法を教えてください –

+0

'Data(base64Encoded:)'を実行すると、文字列をデータに変換します。それはあなたがそうするならば、ファイルに保存できるPDFです。改訂版の回答の例を参照してください。明らかに、あなたはbase64ペイロードの抜粋のみを共有していたので、上記はPDF全体を保存しませんが、これを元の完全なbase64ペイロードで繰り返すと正常に動作します。 – Rob

+0

しかし、このコードは、データを文字列に変換することができません –

関連する問題