Warum emoji zwei verschiedene utf-8-codes? Wie konvertiert emoji von utf-8 verwenden NSString in ios?
Wir haben festgestellt, ein Problem, dass einige emoji zwei utf-8-codes, wie zum Beispiel:
emoji unicode utf-8 another utf-8
? U+1F601 \xf0\x9f\x98\x81 \xed\xa0\xbd\xed\xb8\x81
Aber ios Sprache, die kann nicht decodieren, die andere Art von utf-8, so dass daraus resultierende Fehler, wenn ich Dekodiere Zeichenkette von utf-8.
In allen Dokumenten, die ich gefunden, ich kann nur finden, eine Art von utf-8-code für ein emoji, wo keine zu finden die andere.
Dokumente i verwiesen wird, enthält:
Aber in ein web-tool bianma, alle zwei Arten von utf-8-code umgewandelt werden können in emoji korrekt.
So, meine Frage ist :
-
Warum muss es zwei Arten von utf-8-codes für ein emoji ?
-
Wo ist ein Dokument, das umfasst die zwei Arten von utf-8-codes?
-
Wie man richtig konvertieren string von utf-8, mit NSString in ios Sprache?
- Dies hatte mich fasziniert, wie mein Erster Gedanke war, dass die lange UTF-8-Darstellung wurde zwei UTF-8-Blöcke. Es stellt sich heraus, dass es zwei Varianten von UTF-8, CESU-8 und Modifizierten UTF-8, die encode UTF-16 style. Sie können in der Lage sein dies zu nutzen Artikel iphonedevsdk.com/forum/iphone-sdk-development/... zu schreiben, ein decoder, wenn es keine geeignete iOS/Objective-C native decoder.
- Das ist die Antwort, denke ich. Sollten Sie post, als Antwort.
- Bitte niemals nach der text als Bilder, insbesondere keine code-oder Ausgang.
- Danke @roeland. Ich denke eine richtige Antwort sollte enthalten einige Codes, aber ich bin nicht eine Objective-C-Programmierer überlasse ich jemand anderem, um die Abholung der Herrlichkeit 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die korrekte UTF-8-Codierung für U+1F601 ?.
Ist keine gültige UTF-8-Sequenz(*). Es sollte wirklich abgelehnt werden, iOS ist das richtige zu tun.
Dies ist ein Fehler in der bianma tool: die
convertUtf8BytesToUnicodeCodePoints
Funktion mehr nachsichtig über welche Eingabe akzeptiert wird, als der angegebene Algorithmus in zB RFC 3629.Dies geschieht, um wieder eine Arbeit-string nur, weil das tool in JavaScript geschrieben. Nachdem decodiert die obige byte-Sequenz, um die Schein-Surrogat-Codepunkt Sequenz U+D83D,U+DE01 es dann konvertiert, die in einem JavaScript-string mit einem direkten code-Punkt-zu-code-unit-mapping geben
\uD83D\xDE01
. Da dies der richtige Weg zu codieren ? in eine UTF-16-string-es scheint gewirkt zu haben.(*: Es ist eine gültige CESU-8-Sequenz, aber das encoding ist nur "Schein-defekt-Codierung für die Kompatibilität mit schlecht geschriebenen historischen Werkzeuge" und sollten generell vermieden werden.)
Sollten Sie nicht in der Regel auch eine Abfolge wie diese; es ist in der Regel nicht lohnt, catering, für, es sei denn, Sie haben eine bestimmte Quelle für diese Art der fehlerhaften Daten, die Sie nicht die macht haben, behoben.
Dieser arbeitete für mich in php zum senden einer Nachricht mit emoji zu Telegramm bot: