删除4个字节的UTF8字符

安德烈

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

sText = Regex.Replace (sText, "\xF0...", "");

这行不通。使用两个反斜杠也不起作用。

确切的输入是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 ..

怎么了?

杰普·斯蒂格·尼尔森(Jeppe Stig Nielsen)

此类字符将成为使用UTF-16的.NET中的代理对它们每个都是两个UTF-16代码单元,即两个char值。

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

sText = string.Concat(sText.Where(x => !char.IsSurrogate(x)));

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


后期添加:使用可能会带来更好的性能:

sText = new string(sText.Where(x => !char.IsSurrogate(x)).ToArray());

即使看起来更糟。(在.NET 3.5(Visual Studio 2008)中工作。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章