2014-06-17 10 views
6

Ricevo una stringa da un'API che contiene tag di ancoraggio, quindi sto creando un NSAttributedString da esso e lo visualizzo in un UITextView così posso supportare i collegamenti toccabili.Converti NSString con caratteri unicode in HTML valido

Il problema è che la stringa in ingresso non è un codice HTML valido, quindi contiene caratteri unicode senza caratteri di escape. Cose come:

  • ORIZZONTALE ELLIPSIS Unicode U + 2026, UTF-8: E2 80 A6
  • EM DASH Unicode U + 2014, UTF-8: E2 80 94

Mentre potrei occuparmi di quei casi specifici, sono preoccupato per qualsiasi altro personaggio unicode che arriva, di cui attualmente non sono a conoscenza.

Esempio:

NSString *fromAPI = @"Reagan \U2014 saying"; 
NSDictionary *options = @{NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType}; 
NSData *data = [fromAPI dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO]; 
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:data options:options documentAttributes:nil error:nil]; 

Ciò rende nel UITextView come: enter image description here

Come faccio a farlo per rendere il trattino em e altri unicode correttamente?

+0

Quindi si desidera poter visualizzare i caratteri unicode effettivi in ​​generale senza averli convertiti in qualcos'altro? – Neeku

risposta

7

trovato, sembra che l'HTML non renderà unicode a meno che non si aggiunge questo nel <head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
-1

Quello che stavo per suggerire (se ho capito bene la domanda) è stato quello di utilizzare un regex o qualcosa da aggiungere il carattere di escape \U0000FE0E o semplicemente \UFE0E alla fine di tutti i caratteri Unicode escape, ad esempio:

NSString *fromAPI = @"Reagan \U2014 saying"; 
NSString *convertedFromAPI = @"Reagan \U2014\UFE0E saying"; 

ma penso che quello che stai facendo in questo momento, ha più senso.

+0

L'aggiunta di escape non lo risolve, ho provato. Aggiungendo il meta tag alla testa, lo fa. – jamone

+0

Freddo. Grazie per il feedback. (: – Neeku