如何将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
从Base64
到Data
到String
。
let base64String = "dGhpcyBpcyBmb3IgdGVzdGluZw=="
if let data = Data(base64Encoded: base64String) {
if let string = String(data: data, encoding: .utf8) {
print(string)
}
}
从Base64
到NSData
到String
。
let data = NSData(base64Encoded: base64String, options: .ignoreUnknownCharacters)
var string = String(data: data, encoding: .utf8)
}
雨燕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:
你不能只是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!
}
}
感谢得到它然后如何将Base64转换为pdf –
当你做'数据(base64编码:)',那将转换字符串到数据。这是一个PDF文件,如果你这么喜欢,你可以保存到一个文件中。请参阅修订答案中的示例。显然,你只是分享了你的base64有效载荷的摘录,所以上面的内容不会保存整个PDF,但是如果你重复使用原始的完整base64有效载荷,它应该可以正常工作。 – Rob
但此代码打印无法将数据转换为字符串 –
如果让数据=数据(base64Encoded:base64String){ VAR字符串=字符串(数据:data,encoding:.utf8) } –
在这段代码中字符串变量打印为零 –
这个也是在Base64到NSData之间完成的St环。 –