如何将二进制(非文本)文件读取为字符串?
我需要类似cat -v file.dat
命令所做的事情。
答案 0 :(得分:2)
假设您以某种方式将文件内容读入Data
,您可以使用:
extension UInt8 {
var printableAscii : String {
switch self {
case 0..<32: return "^" + (self + 64).printableAscii
case 127: return "^?"
case 32..<128: return String(bytes: [self], encoding:.ascii)!
default: return "M-" + (self & 127).printableAscii
}
}
}
extension Collection where Element == UInt8 {
var printableAscii : String {
return self.map { $0.printableAscii } .joined()
}
}
let string = data.printableAscii
将数据的字节转换为cat -v
生成的边缘清晰格式。
答案 1 :(得分:1)
如果要转换字节序列,可以使用字符串初始值设定项init?(data: Data, encoding: String.Encoding)
将数据转换为字符串或init?<S>(bytes: S, encoding: String.Encoding) where S : Sequence, S.Element == UInt8
。只需确保使用.ascii
字符串编码:
let string = String(data: data, encoding: .ascii)
答案 2 :(得分:0)
您可以使用
阅读文件let data = FileManager.default.contents(atPath: filePath)
然后使用
将数据转换为base 64字符串let string = data.base64EncodedString()
或带有
的十六进制字符串let string = data.map { String(format: "%02hhx", $0) }.joined()