Wie Entferne ich emoji-Zeichen aus einem string?
Habe ich eine Texteingabe von einem mobilen Gerät. Es enthält emoji. In C# habe ich den text als
Text ?? text
Einfach gesagt, ich möchte die Ausgabe von text
Text text
Ich versuche nur entfernen Sie alle solche emojis aus dem text mit rejex.. außer, ich bin mir nicht sicher, wie Sie Sie konvertieren, die emoji in den unicode-Sequenz..
Wie mache ich das?
edit:
Ich versuche zu speichern, die Benutzer-Eingabe in mysql. Es sieht aus wie mysql UTF8 nicht wirklich unicode-Zeichen unterstützt und die richtige Weg, es zu tun wäre, durch die änderung des Schemas aber ich glaube nicht, dass dies eine option für mich. Ich versuche also, einfach entfernen Sie alle emoji-Zeichen vor dem speichern in der Datenbank.
Dies ist mein schema für die entsprechende Spalte:
Bin ich mit Nhibernate als mein ORM und die insert-Abfrage generiert, die wie folgt aussieht:
Insert into `Content` (ContentTypeId, Comments, DateCreated)
values (?p0, ?p1, ?p2);
?p0 = 4 [Type: Int32 (0)]. ?p1 = 'Text ?? text' [Type: String (20)], ?p2 = 19/01/2015 10:38:23 [Type: DateTime (0)]
Wenn ich kopieren Sie diese Abfrage von Protokollen und führen Sie es auf mysql direkt, bekomme ich diesen Fehler:
1 warning(s): 1366 Incorrect string value: '\xF0\x9F\x98\x80 t...' for column 'Comments' at row 1 0.000 sec
Außerdem habe ich versucht, es zu konvertieren in Codierung Byte und es funktioniert nicht wirklich..
Siehe hier: gist.github.com/adamlwatson/9623703
Welche version von MySQL verwendest du? Scheinbar der Zeichensatz utf8mb4 sollte alles tikitiboo... haben, Lesen Sie sich die Antwort hier stackoverflow.com/questions/24253985/... "Es scheint, dass MySQL unterstützt zwei Formen der unicode-ucs2, das ist 16-bit pro Zeichen und utf-8 bis zu 3 bytes pro Zeichen. Die schlechte Nachricht ist, dass weder form unterstützen Ebene 1-Zeichen, die verlangen, bei 17 bit. (vor allem emoji). Es sieht aus wie MySQL 5.5.3 und auch die Unterstützung utf8mb4, utf16 und utf32 und Ergänzende Zeichen (Lesen emoji)"
Etwas bewusst zu sein, von stackoverflow.com/questions/10992921/... "beachten Sie Jedoch, dass gibt es andere Zeichen, die im Basic Multilingual Plane, die als emoji von Handys, aber die lange verdrängen emoji. Beispiel: U+2665 ist das traditionelle Herz-Anzug Charakter ♥, aber meine werden so dargestellt, als ein emoji-Grafik auf einigen Geräten. Es liegt an Ihnen, ob Sie behandeln Sie dies als emoji und versuchen, Sie zu entfernen."
Octopoid die Kernaussage nicht konvertieren, Sie, es, entfernt. Wenn Sie möchten, entfernen Sie einfach alle Zeichen, die nicht in das BMP, das ist relativ einfach.
InformationsquelleAutor LocustHorde | 2015-01-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Sie wollen einfach nur entfernen Sie alle nicht-BMP-Zeichen, also alles, was mit Unicode-Codepunkt U+10000 und höher, können Sie mit einem regex zu entfernen, UTF-16 Surrogat code-Einheiten aus dem string. Zum Beispiel:
Hier "Cs" ist die Unicode-Kategorie für "Ersatz".
Scheint es, dass
Regex
arbeiten auf Basis von UTF-16 code-Einheiten eher als Unicode-Codepunkte, sonst brauchen Sie einen anderen Ansatz.Beachten Sie, dass gibt es nicht-BMP-Zeichen, die anderen als emoji, aber ich vermute, Sie finden Sie haben das gleiche problem, wenn Sie versuchen, um Sie zu speichern.
So lange, wie Sie sind sich bewusst, dass Sie nur wegwerfen bits von der Eingabe des Benutzers...
Ja! dies ist eine temporäre Lösung (hoffentlich kurzfristig!)
Hi @JonSkeet, ich versuche, deine Regex zu erkennen, ob emojis enthalten sind, in einen string (ziemlich genau die gleiche code). Aus irgendeinem Grund
\p{Cs}
fängt nicht alle emojis. Wissen Sie etwas über diese zufällig? Ich habe versucht, etwa 30 von Ihnen und ein oder zwei nicht erkannt wurden. Ich gehe davon aus, dass Sie sich nicht in der Reichweite des regex, aber ich würde gerne deine fachmännische Meinung, da ich weiß nichts über Surrogate und sehr wenig über die chars im AllgemeinenNa, hast du auch schauen, was Unicode-Kategorien werden diese Zeichen? Es ist wahrscheinlich am besten zu bitten, eine neue Frage mit einem kompletten Beispiel, anstatt "ein oder zwei von Ihnen" (lassen Sie uns raten, welche). Wir können dann schauen, was Los ist, viel leichter.
InformationsquelleAutor Jon Skeet