删除4个字节的UTF8字符

And*_*dré 4 c# regex utf-8

我想从字符串中删除以\ xF0(带有ASCII代码0xF0的字符)开头的4字节UTF8字符并尝试

sText = Regex.Replace (sText, "\xF0...", "");
Run Code Online (Sandbox Code Playgroud)

这不起作用.使用两个反斜杠也不起作用.

确切的输入是https://de.wikipedia.org/w/index.php?title=Spezial:Exportieren&action=submit&pages=Unicode的内容4字节字符是文本"[[Violinschlüssel]]"之后的字符,十六进制表示法:.. 0x65 0x6c 0x5d 0x5d 0x20 0xf0 0x9d 0x84 0x9e 0x20 ..预期输出为0x65 0x6c 0x5d 0x5d 0x20 0x20 ..

怎么了?

Jep*_*sen 5

这些字符将是.NET中使用UTF-16的代理对.它们中的每一个都是两个 UTF-16代码单元,即两个char值.

要删除它们,您可以执行(using System.Linq;):

sText = string.Concat(sText.Where(x => !char.IsSurrogate(x)));
Run Code Online (Sandbox Code Playgroud)

(使用Concat.NET 4.0 中引入的重载(Visual Studio 2010)).


延迟添加:它可以提供更好的使用性能:

sText = new string(sText.Where(x => !char.IsSurrogate(x)).ToArray());
Run Code Online (Sandbox Code Playgroud)

即使它看起来更糟.(适用于.NET 3.5(Visual Studio 2008).)