Je tire un fichier JSON d'un site et l'une des chaînes reçues est:
The Weeknd ‘King Of The Fall’ [Video Premiere] | @TheWeeknd | #SoPhi
Comment puis-je convertir des éléments tels que ‘
les caractères corrects?
J'ai créé un Xcode Playground pour le démontrer:
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
la source
la source
La réponse de @ akashivskyy est excellente et montre comment utiliser
NSAttributedString
pour décoder des entités HTML. Un inconvénient possible (comme il l'a dit) est que tout le balisage HTML est également supprimé, doncdevient
Sur OS X, il y a
CFXMLCreateStringByUnescapingEntities()
ce qui fait le travail:mais ce n'est pas disponible sur iOS.
Voici une implémentation pure de Swift. Il décode les références d'entités de caractères comme l'
<
utilisation d'un dictionnaire, et toutes les entités de caractères numériques comme@
ou€
. (Notez que je n'ai pas répertorié les 252 entités HTML explicitement.)Swift 4:
Exemple:
Swift 3:
Swift 2:
la source
strtooul(string, nil, base)
entièrement le code, le code ne fonctionnera pas avec les entités de caractères numériques et plantera lorsqu'il s'agit d'une entité qu'il ne reconnaît pas (au lieu d'échouer gracieusement).Version Swift 3 de l'extension @ akashivskyy ,
la source
Swift 4
la source
Version Swift 2 de l'extension @ akashivskyy,
la source
Version Swift 4
la source
rawValue
syntaxeNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.documentType.rawValue)
etNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.characterEncoding.rawValue)
c'est horrible. Remplacez-le par.documentType
et.characterEncoding
la source
Je cherchais un utilitaire Swift 3.0 pur pour échapper à / unescape des références de caractères HTML (c'est-à-dire pour les applications Swift côté serveur sur macOS et Linux) mais je n'ai trouvé aucune solution complète, j'ai donc écrit ma propre implémentation: https: //github.com/IBM-Swift/swift-html-entities
Le package
HTMLEntities
,, fonctionne avec les références de caractères nommés HTML4 ainsi que les références de caractères numériques hexadécimaux / déc, et il reconnaîtra les références de caractères numériques spéciales selon la spécification W3 HTML5 (c'est-à-dire qu'il€
ne doit pas être échappé comme signe Euro (unicodeU+20AC
) et PAS comme unicode caractère pourU+0080
, et certaines plages de références de caractères numériques doivent être remplacées par le caractère de remplacementU+FFFD
lors de la désactivation).Exemple d'utilisation:
Et pour l'exemple d'OP:
Edit:
HTMLEntities
prend désormais en charge les références de caractères nommés HTML5 à partir de la version 2.0.0. L'analyse conforme aux spécifications est également implémentée.la source
( ͡° ͜ʖ ͡° )
), alors qu'aucune des autres réponses ne gère cela.Swift 4:
La solution totale qui a finalement fonctionné pour moi avec du code HTML, des caractères de nouvelle ligne et des guillemets simples
Usage:
J'ai ensuite dû appliquer quelques filtres supplémentaires pour me débarrasser des guillemets simples (par exemple, ne pas , n'a pas , c'est , etc.), et des caractères de nouvelle ligne comme
\n
:la source
Ce serait mon approche. Vous pouvez ajouter le dictionnaire d'entités à partir de https://gist.github.com/mwaterfall/25b4a6a06dc3309d9555 mentions Michael Waterfall.
Exemples utilisés:
OU
la source
Solution élégante Swift 4
Si vous voulez une chaîne,
ajoutez cette extension à votre projet:
Si vous voulez un NSAttributedString avec gras, italique, liens, etc.,
ajoutez cette extension à votre projet:
la source
Version var calculée de la réponse de @yishus
la source
Swift 4
la source
la source
Swift 4
Utilisation simple
la source
Swift 4
J'aime vraiment la solution utilisant documentAttributes. Cependant, il est peut-être trop lent pour l'analyse des fichiers et / ou l'utilisation dans les cellules de vue tableau. Je ne peux pas croire qu'Apple ne propose pas de solution décente pour cela.
Pour contourner ce problème, j'ai trouvé cette extension de chaîne sur GitHub qui fonctionne parfaitement et est rapide pour le décodage.
Donc, pour les situations dans lesquelles la réponse donnée est de ralentir , voir la solution suggérée dans ce lien: https://gist.github.com/mwaterfall/25b4a6a06dc3309d9555
Remarque: il n'analyse pas les balises HTML.
la source
Réponse mise à jour fonctionnant sur Swift 3
la source
Objectif c
la source
Version Swift 3.0 avec conversion de la taille de police réelle
Normalement, si vous convertissez directement le contenu HTML en chaîne attribuée, la taille de la police est augmentée. Vous pouvez essayer de convertir une chaîne HTML en chaîne attribuée et inversement pour voir la différence.
Au lieu de cela, voici la conversion de taille réelle qui garantit que la taille de la police ne change pas, en appliquant le ratio de 0,75 sur toutes les polices:
la source
Swift 4
la source
rawValue
syntaxeNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.documentType.rawValue)
etNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.characterEncoding.rawValue)
c'est horrible. Remplacez-le par.documentType
et.characterEncoding
Jetez un œil à HTMLString - une bibliothèque écrite en Swift qui permet à votre programme d'ajouter et de supprimer des entités HTML dans Strings
Par souci d'exhaustivité, j'ai copié les principales fonctionnalités du site:
la source
Version de Swift 5.1
De plus, si vous souhaitez extraire la date, les images, les métadonnées, le titre et la description, vous pouvez utiliser mon pod nommé:
.
Kit de lisibilité
la source
Utilisation:
la source