如何将Base64数据和NSData转换为字符串

问题描述:

我是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

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环。 –

雨燕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() 
    } 
} 

这个问题有两个部分。首先,将基础字符串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

但此代码打印无法将数据转换为字符串 –