2009-05-07 9 views
33

Ich fühle mich unglaublich dumm für diese Frage, aber die Dokumentation und Google geben mir keine Liebe überhaupt.Wie kann ich ein Unicode-Zeichen in meinem Objective-C-Quellcode umgehen?

Ich habe ein Unicode-Zeichen, das ich in ein String-Literal im Quellcode meiner iPhone App einfügen möchte. Ich kenne seinen Hexwert. Was ist die richtige Escape-Sequenz zu verwenden? Und was für eine offensichtliche Informationsquelle übersehe ich, die mir das erzählt hätte?

+0

Ähnliche Fragen/Antworten für Swift: http://stackoverflow.com/questions/31284538/how-to-express-strings-in-swift-using-unicode-hexadecimal-values-utf-16 – Suragch

Antwort

56

Beispiel:

NSString *stuff = @"The Greek letter Beta looks like this: \u03b2, and the emoji for books looks like this: \U0001F4DA"; 
+1

Das hat es getan. Vielen Dank! –

+3

Sie müssen nicht entkommen. Standardmäßig interpretiert der Editor und die Compiler-Toolchain die Quellcodedatei als UTF8. Sie können ein beliebiges Unicode-Zeichen in Ihren String-Konstanten verwenden. Dies war vor der Mac OS X 10.5-Toolchain nicht richtig. – Ken

+0

Es hängt auch davon ab, welche Schriftarten Sie verwenden. Es gibt wenige Schriftarten, die nicht alle Unicodes unterstützen. –

1

Die richtige Escape-Sequenz wäre etwas entlang der Linien von

wchar_t * str = L"\x0627"; 

Sehen Sie diese Frage: character constant:\000 \xhh

Edit: Oh, sorry, vermisste ich das iPhone und Objective-C-Tags. Das oben genannte gilt für generisches C/C++, aber ich habe nicht mit der iPhone-Entwicklung gearbeitet, so dass Ihre Laufleistung variieren kann.

+0

Es funktioniert: " \ u0024 "\t für UTF-16 und" \ x24 "für UTF-8 in Objective-C bzw." \ u {0024} "und" \ u {24} "in Swift; meine Antwort betrifft nicht Wide-Chars – tontonCD

+0

Yay, funktioniert auch für Unicar und Zeichen Literale, e g 'unichar x = L '•';'. (nett, wenn Sie mit NSString und getCharacters/stringWithCharacters arbeiten) – nevyn

10

Wenn Sie wollen, dass es nicht direkt in der Zeichenfolge setzen Sie einen Formatbezeichner wie diese verwenden:

[string stringByAppendingFormat:@"%C", 0x2665]; 
-3

\ ist das Escape-Zeichen in Ziel c

NSString temp = @" hello \"temporary.h\" has been inported"; 

Hier, wenn Sie den Druck: es vor dem Buchstaben verwenden, um wie sein entkommen Temp-String in Textview oder Protokolle, sehen Sie " als auch gedruckt werden, weil wir die \ vor ihnen verwendet, die die Escape-Zeichen

+0

Dies beantwortet die Frage nicht, da nicht erklärt wird, wie Sie mit dem '\' Escape-Zeichen ein Unicode-Zeichen einfügen können. – Supuhstar

3

Eine modernere Ansatz ist:

Ich bin nicht sicher, wenn diese Funktion war der Sprache hinzugefügt, aber ab 2015 mindestens Objective-C-String-Literale können ein beliebiges Unicode-Zeichen enthalten. Zum Beispiel markiere ich meine Log-Zeilen mit Emojis, weil ihre charakteristischen Farben ein einfacher Weg für mich, sie herauszusuchen:

message:@" \n \n\t‼️ Error: %@"

Also, wenn Sie den Charakter und nicht nur den Code Punkt haben, und Sie möchten es in einer statischen Zeichenfolge verwenden und nicht dynamisch generieren. Dies ist ein großartiger Ansatz, da Sie sofort wissen, welchen Charakter Sie gerade verwenden, indem Sie es betrachten.

+1

Dies ist "immer" der Fall gewesen, für Werte von "immer", die zumindest bis zur Einführung von LLVM zurückreichen, wenn nicht sogar früher. –

+0

@ BrentRoyal-Gordon danke! Jetzt weiß ich – Supuhstar