2014-05-04 16 views
9

Abbiamo una coppia chiave-valore nel file Localization.string.Localizzazione iOS: sequenze di escape di caratteri Unicode, che hanno il formato ' uxxxx' non funziona

"spanish-key" = "Espa\u00f1ol"; 

Quando si preleva e si assegna all'etichetta, l'app lo visualizza come "Espau00f1ol".

Non funziona.

self.label1.text= NSLocalizedString(@"spanish-key", nil); 

E works- spettacoli in formato richiesto.

self.label1.text= @"Espa\u00f1ol"; 

Quale potrebbe essere il problema qui quando usiamo

NSLocalizedString(@"spanish-key", nil)? 

Se impostiamo \ U invece di \ u, allora funziona.

"spanish-key" = "Espa\U00f1ol"; 

Quando usare "\ Uxxxx" e "\ uXXXX"?

risposta

26

NSString letterali e stringhe di file utilizzano diverse regole Fuggire dalla realtà.

NSString letterali utilizzano le stesse sequenze di escape come "normali" C-stringhe, in particolare i "nomi carattere universale" definiti nello standard C99:

\unnnn  - the character whose four-digit short identifier is nnnn 
\Unnnnnnnn - the character whose eight-digit short identifier is nnnnnnnn 

Esempio:

NSString *string = @"Espa\u00F1ol - \U0001F600"; // Español - 

I file di stringhe, d'altra parte, usano \Unnnn per indicare un carattere UTF-16, e "Coppie surrogate UTF-16" per i caratteri> U + FFFF:

"spanish-key" = "Espa\U00f1ol - \Ud83d\Ude00"; 

(Questo è l'escape utilizzato in "vecchio stile elenchi di proprietà", che si può vedere quando si stampa la descrizione di un `NSDictionary.)

questo (si spera) risponde alla tua domanda

Quando utilizzare "\ Uxxxx" e "\ uxxxx"?

Ma: Come osservato anche da @ gnasher729 nella sua risposta, non v'è alcuna necessità di utilizzare Unicode sequenze di escape a tutti. Si può semplicemente inserire i caratteri Unicode per sé, sia in NSString letterali e nelle stringhe-files:

NSString *string = @"Español - "; 

"spanish-key" = "Español - "; 
+0

Grazie per la grande spiegazione.Ancora voglio sapere quale metodo è raccomandato quando si tratta di file di stringhe di localizzazione. Dobbiamo usare sequenze di escape unicode, perché il file di stringhe è pronto che contiene sequenze di escape unicode. È possibile ottenere riferimento al documento Apple dove sono menzionate queste cose? –

+0

@GauravBorole: è consigliato in https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html che i file di stringhe vengono salvati nella codifica UTF-16, il che significa che puoi usare tutti i personaggi senza alcuna sequenza di escape, come in "" spanish-key "=" Español - ";'. Ma è completamente la tua scelta, entrambi i metodi funzionano. –

+0

@MartinR Una buona spiegazione, ma qual è la soluzione quando una stringa localizzata deve contenere una sequenza di escape per un carattere unicode, oltre alla digitazione del carattere? – Manuel

2

Basta scrivere la stringa in Unicode corretto in Localization.string.

"spanish-key" = "Español"; 
Problemi correlati