我想从字符串中删除以\ 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 ..
怎么了?
此类字符将成为使用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] 删除。
我来说两句