En primer lugar, encontré esto: Objective C HTML escape / unescape , pero no funciona para mí.
Mis caracteres codificados (provienen de una fuente RSS, por cierto) se ven así: &
Busqué en toda la red y encontré discusiones relacionadas, pero no hay solución para mi codificación particular, creo que se llaman caracteres hexadecimales.
iphone
html
objective-c
cocoa
cocoa-touch
treznik
fuente
fuente

&#...;en una cadena con su carácter equivalente.8.Respuestas:
Esas se denominan referencias de entidad de carácter . Cuando toman la forma de
&#<number>;se denominan referencias numéricas de entidad . Básicamente, es una representación de cadena del byte que debe sustituirse. En el caso de&, representa el carácter con el valor de 38 en el esquema de codificación de caracteres ISO-8859-1, que es&.La razón por la que el ampersand debe codificarse en RSS es que es un carácter especial reservado.
Lo que debe hacer es analizar la cadena y reemplazar las entidades con un byte que coincida con el valor entre
&#y;. No conozco ninguna manera excelente de hacer esto en el objetivo C, pero esta pregunta de desbordamiento de pila podría ser de alguna ayuda.Editar: Desde que respondí a esto hace unos dos años, hay algunas soluciones excelentes; vea la respuesta de @Michael Waterfall a continuación.
fuente
Consulte mi categoría NSString para HTML . Estos son los métodos disponibles:
fuente
El de Daniel es básicamente muy bueno, y solucioné algunos problemas allí:
eliminó el carácter de omisión para NSSCanner (de lo contrario, los espacios entre dos entidades continuas se ignorarían
[escáner setCharactersToBeSkipped: nil];
Se corrigió el análisis cuando hay símbolos '&' aislados (no estoy seguro de cuál es la salida 'correcta' para esto, simplemente la comparé con Firefox):
p.ej
aquí está el código modificado:
fuente
A partir de iOS 7, puede decodificar caracteres HTML de forma nativa utilizando un
NSAttributedStringcon elNSHTMLTextDocumentTypeatributo:La cadena con atributos decodificados ahora se mostrará como: & & <> ™ © ♥ ♣ ♠ ♦.
Nota: Esto solo funcionará si se llama en el hilo principal.
fuente
Nadie parece mencionar una de las opciones más simples: Google Toolbox para Mac
(a pesar del nombre, esto también funciona en iOS).
https://github.com/google/google-toolbox-for-mac/blob/master/Foundation/GTMNSString%2BHTML.h
Y tuve que incluir solo tres archivos en el proyecto: encabezado, implementación y
GTMDefines.h.fuente
Debería publicar esto en GitHub o algo así. Esto entra en una categoría de NSString, se usa
NSScannerpara la implementación y maneja entidades de caracteres numéricos hexadecimales y decimales, así como las habituales simbólicas.Además, maneja cadenas mal formadas (cuando tiene un & seguido de una secuencia de caracteres no válida) con relativa elegancia, lo que resultó ser crucial en mi aplicación publicada que usa este código.
fuente
gotos como su estilo de código terrible. Deberías reemplazar la líneagoto finish;conbreak;.Esta es la forma en que lo hago usando el marco RegexKitLite :
}
Espero que esto ayude a alguien.
fuente
puede usar solo esta función para resolver este problema.
fuente
Aquí hay una versión rápida de la respuesta de Walty Yeung :
fuente
En realidad, rmchaara ha bifurcado el gran marco MWFeedParser de Michael Waterfall (referido a su respuesta), ¡y lo ha actualizado con el soporte de ARC!
Puedes encontrarlo en Github aquí
Realmente funciona muy bien, utilicé el método stringByDecodingHTMLEntities y funciona perfectamente.
fuente
¡Como si necesitaras otra solución! Este es bastante simple y bastante efectivo:
fuente
Si tiene la Referencia de entidad de carácter como una cadena, por ejemplo
@"2318", puede extraer una NSString recodificada con el carácter Unicode correcto usandostrtoul;fuente
Swift 3 versión de la respuesta de Jugale
fuente