2017-07-04 92 views
3

我是IOS新手,我正在製作一個項目,在該項目中我從Web服務接收Base64數據。如何將Base64數據轉換爲字符串以及如何在swift中打開pdf視圖,並檢查是否有任何pdf所有者應用程序安裝或不在iPhone中。並且我想知道如何將swift中的NSDATA轉換爲字符串。幫助我 示例像這樣採用Base64數據 JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdGVyIC9GbGF0ZURlY29kZT4 + CnN0cmVhbQp4nLVcza8ct5GH1rK9ejIU24lkO5GtJ8vWm5E87eY3uXtbYLHAYi8JdItySrABAjhA8v8fUuwmu35kF2fmxbsWDMxjk8VisapYX + TfbudJ6ds5/6S // VJ如何將Base64數據和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

Base64DataString

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

Base64NSDataString

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

如果讓數據=數據(base64Encoded:base64String){ VAR字符串=字符串(數據:data,encoding:.utf8) } –

+0

在這段代碼中字符串變量打印爲零 –

+0

這個也是在Base64到NSData之間完成的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

這個問題有兩個部分。首先,將基礎字符串64轉換爲Data/NSData。但你已經做到了,所以你不需要幫助。

其次,將該Data/NSData轉換爲一個字符串。但是,如果仔細查看該文件,則會看到數據是PDF文件,而不是文本字符串。例如,如果我保存爲文件,看看它在十六進制編輯器,我可以清楚地看到這是一個PDF:

hex dump

你不能只是PDF的二進制數據轉換爲字符串。 (事實上​​,這就是爲什麼它是base64編碼的原因,因爲它是複雜的二進制數據。)

但是,您可以使用UIDocumentInteractionController來預覽保存到文件的PDF文件。


例如:

// 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

當你做'數據(base64編碼:)',那將轉換字符串到數據。這是一個PDF文件,如果你這麼喜歡,你可以保存到一個文件中。請參閱修訂答案中的示例。顯然,你只是分享了你的base64有效載荷的摘錄,所以上面的內容不會保存整個PDF,但是如果你重複使用原始的完整base64有效載荷,它應該可以正常工作。 – Rob

+0

但此代碼打印無法將數據轉換爲字符串 –

相關問題