sql >> Databáze >  >> RDS >> Mysql

Jak odstraním znaky emoji z řetězce?

Za předpokladu, že chcete pouze odstranit všechny znaky, které nejsou BMP, tj. cokoli s bodem kódu Unicode U+10000 a vyšším, můžete pomocí regulárního výrazu odstranit jakékoli náhradní znaky UTF-16 kódové jednotky z řetězce. Například:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main(string[] args)
    {
        string text = "x\U0001F310y";
        Console.WriteLine(text.Length); // 4
        string result = Regex.Replace(text, @"\p{Cs}", "");
        Console.WriteLine(result); // 2
    }
}

Zde „Cs“ je kategorie Unicode pro „náhradní“.

Zdá se, že Regex funguje na základě kódových jednotek UTF-16 spíše než bodů kódu Unicode, jinak byste potřebovali jiný přístup.

Všimněte si, že existují jiné znaky než BMP než emotikony, ale mám podezření, že při pokusu o jejich uložení zjistíte, že budou mít stejný problém.




  1. CRS 11.2.0

  2. Co když potřebuji velmi velké ID automatického přírůstku?

  3. Chyba dotazování KGXGN (15)

  4. Sloupce data v SQL-Serveru (MSSQL-JDBC 3.0) běžícím pod Java 1.7.0 byly načteny jako 2 dny v minulosti