Convierta el símbolo Unicode o sus entidades XML / HTML en su número Unicode en Swift

Dado un símbolo unicode como una String o sus entidades XML / HTML, ¿cómo podría uno generar su número Unicode? Por ejemplo, si recibe la cadena "෴" y podría generar su código HTML ( ), ¿cómo podría generar su número Unicode ( U+0DF4 )?

Actualmente estoy generando las entidades HTML utilizando la API CFStringTransform y usando kCFStringTransformToXMLHex para la transformación. Pero no hay una transformación para el número unicode en sí.

Actualización: Xcode 8 • Swift 3

 extension String { var html2AttributedString: NSAttributedString? { do { return try NSAttributedString(data: Data(utf8), options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil) } catch { print(error) return nil } } var unicodes: [UInt32] { return unicodeScalars.map{$0.value} } } 

 let str = "<span>&euro;€</span>".html2AttributedString?.string ?? "" print(str.unicodes) // [8364, 8364] 

O en Swift 3:

 extension String { func convertHtmlSymbols() throws -> String? { guard let data = data(using: .utf8) else { return nil } return try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil).string } } 

Con SwiftSoup es fácil. SwiftSoup es una librería Swift pura, multiplataforma (macOS, iOS, tvOS, watchOS y Linux!)

 let text = "Hello &<> Å å π 新 there ¾ © »" print(Entities.escape(text)) print(Entities.unescape(text)) print(Entities.escape(text, OutputSettings().encoder(String.Encoding.ascii).escapeMode(Entities.EscapeMode.base))) print(Entities.escape(text, OutputSettings().charset(String.Encoding.ascii).escapeMode(Entities.EscapeMode.extended))) print(Entities.escape(text, OutputSettings().charset(String.Encoding.ascii).escapeMode(Entities.EscapeMode.xhtml))) print(Entities.escape(text, OutputSettings().charset(String.Encoding.utf8).escapeMode(Entities.EscapeMode.extended))) print(Entities.escape(text, OutputSettings().charset(String.Encoding.utf8).escapeMode(Entities.EscapeMode.xhtml))) 

Salida:

 "Hello &amp;&lt;&gt; Å å π 新 there ¾ © »" "Hello &<> Å å π 新 there ¾ © »" "Hello &amp;&lt;&gt; &Aring; &aring; &#x3c0; &#x65b0; there &frac34; &copy; &raquo;" "Hello &amp;&lt;&gt; &angst; &aring; &pi; &#x65b0; there &frac34; &copy; &raquo;" "Hello &amp;&lt;&gt; &#xc5; &#xe5; &#x3c0; &#x65b0; there &#xbe; &#xa9; &#xbb;" "Hello &amp;&lt;&gt; Å å π 新 there ¾ © »" "Hello &amp;&lt;&gt; Å å π 新 there ¾ © »"