2014-05-04 20 views
9

Wir haben Schlüssel-Wert-Paar in Localization.string-Datei.iOS-Lokalisierung: Unicode-Zeichen-Escape-Sequenzen, die die Form ' uxxxx' haben, funktionieren nicht

Wenn wir holen und zuweisen, dann zeigt die App es als "Espau00f1ol" an.

Funktioniert nicht.

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

Es Works-Shows im gewünschten Format.

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

Was das Problem hier sein könnte, wenn wir

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

verwenden Wenn wir \ U anstelle von \ u gesetzt ist, dann funktioniert es.

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

Wann verwendet "\ Uxxxx" und "\ uxxxx"?

Antwort

26

NSString Literale und Streicher-Dateien verwenden verschiedene Entkommen Regeln.

NSString Literale verwenden die gleichen Escape-Sequenzen als "normal" C-strings, insbesondere die in der C99-Standard definierten "universelle Zeichennamen":

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

Beispiel:

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

Strings-Dateien hingegen verwenden \Unnnn, um ein UTF-16-Zeichen, und "UTF-16-Ersatzpaare" für Zeichen> U + FFFF:

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

(Dies ist die in „alten Stil Eigenschaftslisten“ verwendet, Flüchten, die Sie, wenn Druck sehen die Beschreibung eines `NSDictionary.)

Diese (hoffentlich) beantwortet Ihre Frage

Wann "\ Uxxxx" und "\ uxxxx" verwenden?

Aber: Wie auch von @ gnasher729 in seiner Antwort erwähnt, gibt es keine Notwendigkeit zur Verwendung von Unicode an all Escape-Sequenzen. Sie können einfach das Unicode-Zeichen selbst einfügen, sowohl in NSString Literalen und in Zeichenketten-Dateien:

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

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

Dank für die große Erklärung.Trotzdem möchte ich wissen, welche Methode für Lokalisierungsstrings empfohlen wird. Wir müssen Unicode-Escape-Sequenzen verwenden, da die Zeichenkettendatei bereit ist, die Unicode-Escape-Sequenzen enthält. Ist es möglich, Apple Dokument Referenz zu bekommen, wo diese Dinge erwähnt? –

+0

@GauravBorole: Es wird in https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html empfohlen, dass die Strings-Dateien in der UTF-16-Codierung gespeichert werden, was bedeutet, dass Sie können alle Zeichen ohne Escape-Sequenz verwenden, wie in '" spanish-key "=" Español - ";'. Aber es ist völlig deine Wahl, beide Methoden funktionieren. –

+0

@MartinR Gute Erklärung, aber was ist die Lösung, wenn eine lokalisierte Zeichenfolge eine Escape-Sequenz für ein Unicode-Zeichen enthalten sollte, außer das Zeichen aus? – Manuel

2

Schreiben Sie einfach die Zeichenfolge in den richtigen Unicode in Localization.string.

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