如何删除字符串中的任何utf8mb4字符

Raf*_*ael 4 .net c# utf-8 utf8mb4

使用C#如何从字符串中删除utf8mb4字符(表情符号等),以便结果符合utf8标准.

大多数解决方案涉及更改数据库配置,但遗憾的是我没有这种可能性.

xan*_*tos 6

这应该替换代理字符replacementCharacter(甚至可以string.Empty)

这是一个MySql问题,给出了utf8mb4.这里有Myfql中utf8和utf8mb4的区别.区别在于utf8不支持4字节utf8序列.通过查看wiki,4字节utf8序列是那些> 0xFFFF,因此在utf16中需要两个char(称为代理对).此方法删除代理对字符.当发现"耦合"(高+低代理对)时,则单个replacementCharacter被替换,否则孤立(错误)高或低代理对被替换为a replacementCharacte.

public static string RemoveSurrogatePairs(string str, string replacementCharacter = "?")
{
    if (str == null)
    {
        return null;
    }

    StringBuilder sb = null;

    for (int i = 0; i < str.Length; i++)
    {
        char ch = str[i];

        if (char.IsSurrogate(ch))
        {
            if (sb == null)
            {
                sb = new StringBuilder(str, 0, i, str.Length);
            }

            sb.Append(replacementCharacter);

            // If there is a high+low surrogate, skip the low surrogate
            if (i + 1 < str.Length && char.IsHighSurrogate(ch) && char.IsLowSurrogate(str[i + 1]))
            {
                i++;
            }
        }
        else if (sb != null)
        {
            sb.Append(ch);
        }
    }

    return sb == null ? str : sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)