update: Xcode 11.4 ? Swift 5.2
extension String {
var data: Data { .init(utf8) }
var html2AttributedString: NSAttributedString? {
do {
return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
} catch {
print(error)
return nil
}
}
var html2String: String { html2AttributedString?.string ?? "" }
var unicodes: [UInt32] { unicodeScalars.map(.value) }
}
let str = "<span>€€</span>".html2String // "€€"
str.unicodes // [8364, 8364]
extension StringTransform {
static let toUnicodeHex = Self("Hex/Unicode")
static let toJavaHex = Self("Hex/Java")
static let toPerlHex = Self("Hex/Perl")
}
extension String {
var convertedToUnicodeHex: String { applyingTransform(.toUnicodeHex, reverse: false) ?? "" }
var convertedToJavaHex: String { applyingTransform(.toJavaHex, reverse: false) ?? "" }
var convertedToXMLHex: String { applyingTransform(.toXMLHex, reverse: false) ?? "" }
var convertedToPerlHex: String { applyingTransform(.toPerlHex, reverse: false) ?? "" }
}
"?".convertedToUnicodeHex // U+0DF4
"?".convertedToJavaHex // u0DF4
"?".convertedToXMLHex // ෴
"?".convertedToPerlHex // x{DF4}
"?".unicodes // [3572]
0x0DF4 // 3572
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…