You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 = "he​llo ​";
// 先移除所有零宽空格,再移除首尾常规空白
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:37:42