Trim()无法移除U+200B零宽空格,如何处理该问题?
处理Trim()无法移除的零宽空格(U+200B)问题
.NET 自带的 Trim() 方法默认仅移除常规空白字符(如空格、制表符、换行/回车符等),而 U+200B 零宽空格属于 Unicode 格式控制字符,不在默认的移除范围内,因此调用 Trim() 后会被保留。
以下是几种可行的处理方案:
1. 自定义 Trim 字符集合
直接指定要移除的字符列表,包含 U+200B:
string x = "hello "; // 包含常规空白和零宽空格的字符数组 char[] targetChars = new[] { ' ', '\t', '\n', '\r', '\u200B' }; string trimmed = x.Trim(targetChars); Console.WriteLine($"\"{trimmed}\""); // 输出:"hello"
2. 正则表达式替换零宽空格
如果需要移除字符串中所有位置(包括中间)的零宽空格,可使用正则替换:
using System.Text.RegularExpressions; string x = "hello "; // 先移除所有零宽空格,再移除首尾常规空白 string processed = Regex.Replace(x, "\u200B", "").Trim(); Console.WriteLine($"\"{processed}\""); // 输出:"hello"
3. 基于 Unicode 类别过滤
通过 Unicode 类别判断,移除所有空白字符和格式控制字符(注意:可能会误删其他需要的格式字符,需谨慎使用):
using System.Globalization; string x = "hello "; string filtered = new string(x.Where(c => !char.IsWhiteSpace(c) && char.GetUnicodeCategory(c) != UnicodeCategory.Format ).ToArray()); Console.WriteLine($"\"{filtered}\""); // 输出:"hello"
内容的提问来源于stack exchange,提问作者MaKeSter
相关产品推荐
相关产品推荐

