2016-03-29 4 views
1

In C++ - Ebene möchte ich Emoji-String wie ":smile:" zu Unicode "\u{1f604}" ändern, die IOS unterstützt.
Allerdings unterstützt C++ diesen Typ nicht, \u muss mit Ziffer folgen. Dann ändere ich Unicode zu "\\u{1f604}". Jetzt kann es gut in C++ - Ebene arbeiten, aber wenn ich diese Zeichenfolge an IOS-Ebene übergebe, ändert IOS diese Zeichenfolge nicht automatisch in Emoji.
Könnten Sie mir bitte ein paar Ideen geben?

Es tut mir leid, dass ich es nicht klar beschrieben habe.
In meinem Projekt parse ich Json vom Server in C++ - Ebene und dann übermittle ich diese Daten auf IOS-Ebene.pass emoji Unicode von cpp Core-Level auf iOS Ebene

+0

Wahrscheinlich können Sie einen Scheck in Ihrem iOS-Code, ob String beginnt oder enthält '\\ u {1f604}' betrachten einzelnen Schrägstrich '\ u {1f604} '. – NightFury

+0

Sind Sie sicher, dass dies nicht nur eine andere Art ist, das gleiche Zeichen darzustellen? Was Sie in C++ brauchen, ist vielleicht "\ u15604". OTOH, das Emoji befindet sich außerhalb der mehrsprachigen Grundebene. Wenn Sie UTF16 verwenden, müssen Sie es möglicherweise als Ersatzpaar codieren. –

Antwort

1

Um Codepunkte über U + FFFF in C++ zu entschlüsseln, müssen Sie \U gefolgt von acht Hex-Ziffern verwenden (erfordert C++ 11 oder höher). Je nach der gewünschten Codierung, können Sie eine der folgenden Stringliteral Formulare:

u8"\U0001f604" // UTF-8, type const char[] 
u"\U0001f604" // UTF-16, type const char16_t[] 
U"\U0001f604" // UTF-32, type const char32_t[] 
0

Sie könnten eine NSString Klassenmethode schreiben, die einen NSInteger enthält einen Codepunkt als Argument und gibt eine NSString * mit einem einzigen Unicode-Zeichen, das diesen Codepunkt enthält.

Um dies zu implementieren, wenn der CodePoint < = 0xffff ist dann übersetzen Sie es in eine einzige unichar, andernfalls konvertieren Sie es in ein Array von zwei Unichars, einem hohen Ersatz und einem niedrigen Ersatz (Google zur Erklärung). Verwenden Sie dann eine der vorhandenen NSString-Methoden, um diese in NSString zu konvertieren.

Conversion-Codepunkt in High/Low-Ersatz: Subtrahieren 0x10000. Hohes Surrogat = 0xd800 + (Codepunkt >> 10); niedriger Ersatz = 0xdc00 + (Codestelle & 0x3ff).

Beispiel:

NSString* smile = [NSString stringWithCodePoint:0x1f604];