Ich ziehe eine JSON-Datei von einer Site und eine der empfangenen Zeichenfolgen lautet:
The Weeknd ‘King Of The Fall’ [Video Premiere] | @TheWeeknd | #SoPhi
Wie kann ich Dinge wie konvertieren ‘
in die richtigen Zeichen ?
Ich habe einen Xcode-Spielplatz erstellt, um dies zu demonstrieren:
import UIKit
var error: NSError?
let blogUrl: NSURL = NSURL.URLWithString("http://sophisticatedignorance.net/api/get_recent_summary/")
let jsonData = NSData(contentsOfURL: blogUrl)
let dataDictionary = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary
var a = dataDictionary["posts"] as NSArray
println(a[0]["title"])
json
swift
html-entities
code_cookies
quelle
quelle
Die Antwort von @ akashivskyy ist großartig und zeigt, wie
NSAttributedString
HTML-Entitäten dekodiert werden können. Ein möglicher Nachteil (wie er sagte) ist, dass alle HTML-Markups ebenfalls entfernt werdenwird
Unter OS X gibt es
CFXMLCreateStringByUnescapingEntities()
Folgendes:Dies ist jedoch unter iOS nicht verfügbar.
Hier ist eine reine Swift-Implementierung. Es dekodiert Zeichenentitätsreferenzen wie die
<
Verwendung eines Wörterbuchs und alle numerischen Zeichenentitäten wie@
oder€
. (Beachten Sie, dass ich nicht alle 252 HTML-Entitäten explizit aufgelistet habe.)Swift 4:
Beispiel:
Swift 3:
Swift 2:
quelle
strtooul(string, nil, base)
Wenn Sie den Code jedoch vollständig entfernen, funktioniert der Code nicht mit Entitäten mit numerischen Zeichen und stürzt ab, wenn es sich um eine Entität handelt, die nicht erkannt wird (anstatt ordnungsgemäß zu versagen).Swift 3- Version von @ akashivskyys Erweiterung ,
quelle
Swift 4
quelle
Swift 2- Version von @ akashivskyys Erweiterung,
quelle
Swift 4 Version
quelle
rawValue
SyntaxNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.documentType.rawValue)
undNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.characterEncoding.rawValue)
ist schrecklich. Ersetzen Sie es durch.documentType
und.characterEncoding
quelle
Ich suchte nach einem reinen Swift 3.0-Dienstprogramm, um HTML-Zeichenreferenzen zu entkommen / zu entkommen (dh für serverseitige Swift-Apps unter MacOS und Linux), fand jedoch keine umfassenden Lösungen und schrieb meine eigene Implementierung: https: //github.com/IBM-Swift/swift-html-entities
Das Paket
HTMLEntities
funktioniert mit HTML4-Zeichenreferenzen sowie benannten Hex / Dec-Zeichenreferenzen und erkennt spezielle numerische Zeichenreferenzen gemäß der W3-HTML5-Spezifikation (dh€
sollte als Euro-Zeichen (UnicodeU+20AC
) und NICHT als Unicode entkoppelt werden Zeichen fürU+0080
und bestimmte Bereiche von numerischen Zeichenreferenzen sollten durch das Ersatzzeichen ersetzt werdenU+FFFD
beim Entkuppeln ersetzt werden.Anwendungsbeispiel:
Und zum Beispiel von OP:
Bearbeiten:
HTMLEntities
Unterstützt jetzt HTML5-Referenzen für benannte Zeichen ab Version 2.0.0. Spezifikationskonformes Parsen ist ebenfalls implementiert.quelle
( ͡° ͜ʖ ͡° )
), während keine der anderen Antworten dies schafft.Swift 4:
Die Gesamtlösung, die für mich endlich mit HTML-Code, Zeilenumbrüchen und einfachen Anführungszeichen funktioniert hat
Verwendung:
Ich musste dann einige weitere Filter anwenden, um einfache Anführungszeichen (z. B. nicht , nicht , es ist usw.) und neue Zeilenzeichen wie
\n
:quelle
Dies wäre mein Ansatz. Sie können das Entities-Wörterbuch unter https://gist.github.com/mwaterfall/25b4a6a06dc3309d9555 hinzufügen, das Michael Waterfall erwähnt.
Verwendete Beispiele:
ODER
quelle
Elegante Swift 4-Lösung
Wenn Sie eine Zeichenfolge möchten,
Fügen Sie diese Erweiterung Ihrem Projekt hinzu:
Wenn Sie einen NSAttributedString mit Fettdruck, Kursivschrift, Links usw. möchten,
Fügen Sie diese Erweiterung Ihrem Projekt hinzu:
quelle
Berechnete var-Version der Antwort von @yishus
quelle
Swift 4
quelle
quelle
Swift 4
Einfache Verwendung
quelle
Swift 4
Ich mag die Lösung mit documentAttributes sehr. Es ist jedoch möglicherweise zu langsam, um Dateien zu analysieren und / oder in Zellen der Tabellenansicht zu verwenden. Ich kann nicht glauben, dass Apple dafür keine vernünftige Lösung bietet.
Als Workaround habe ich diese String-Erweiterung auf GitHub gefunden, die perfekt funktioniert und sich schnell dekodieren lässt.
Für Situationen, in denen die angegebene Antwort zu langsam ist , lesen Sie die Lösungsvorschläge in diesem Link: https://gist.github.com/mwaterfall/25b4a6a06dc3309d9555
Hinweis: HTML-Tags werden nicht analysiert.
quelle
Aktualisierte Antwort für Swift 3
quelle
Ziel c
quelle
Swift 3.0-Version mit tatsächlicher Schriftgrößenkonvertierung
Wenn Sie HTML-Inhalte direkt in eine zugewiesene Zeichenfolge konvertieren, wird normalerweise die Schriftgröße erhöht. Sie können versuchen, eine HTML-Zeichenfolge in eine zugeordnete Zeichenfolge und wieder zurück zu konvertieren, um den Unterschied festzustellen.
Hier ist stattdessen die tatsächliche Größenkonvertierung , die sicherstellt, dass sich die Schriftgröße nicht ändert, indem das Verhältnis 0,75 auf alle Schriftarten angewendet wird:
quelle
Swift 4
quelle
rawValue
SyntaxNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.documentType.rawValue)
undNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.characterEncoding.rawValue)
ist schrecklich. Ersetzen Sie es durch.documentType
und.characterEncoding
Schau es dir an HTMLString an - eine in Swift geschriebene Bibliothek, mit der Ihr Programm HTML-Entitäten in Strings hinzufügen und entfernen kann
Der Vollständigkeit halber habe ich die Hauptfunktionen von der Website kopiert:
quelle
Swift 5.1 Version
Wenn Sie Datum, Bilder, Metadaten, Titel und Beschreibung extrahieren möchten, können Sie auch meinen Pod mit dem Namen verwenden:
.
Lesbarkeits-Kit
quelle
Verwenden:
quelle