如何检测(在调试期间)该字符串是否包含一些隐藏字符(例如零宽度空间)?如何在调试过程中检测字符串中的隐藏字符(例如零宽度空间)
示例:在调试过程中,我比较了两个不同的字符串,它们看起来与我的眼睛相同。当然,他们在一些隐藏的字符中有所不同。如何找到差异?
我在Visual Studio的“立即窗口”中使用了string.ToCharArray()方法,但必须有更舒适的方式。
如何检测(在调试期间)该字符串是否包含一些隐藏字符(例如零宽度空间)?如何在调试过程中检测字符串中的隐藏字符(例如零宽度空间)
示例:在调试过程中,我比较了两个不同的字符串,它们看起来与我的眼睛相同。当然,他们在一些隐藏的字符中有所不同。如何找到差异?
我在Visual Studio的“立即窗口”中使用了string.ToCharArray()方法,但必须有更舒适的方式。
如何:
text.Contains("\u200B")
或者
text.IndexOf('\u200B') != -1
你可以使用这个在即时窗口:
str.Contains("\u8203");
或者把它放在监视窗口,所以你只是必须单击观察值附近的刷新按钮才能看到结果,而不是将其重新输入到立即(尽管您!可一直按起来,然后进入重新进入最后的命令)
来检查任何隐藏的字符,你可以与所有的隐藏字符的静态数组和检查:
HIDDENS.Any(c => str.Contains(c.ToString())
而且最好甚至保存的隐藏字符作为一个长字符串,然后做:
HIDDENS.Any(str.Contains)
,或者你可以真正成熟,这样做:
private static readonly Bitmap BMP = new Bitmap(1000, 1000);
private static readonly Graphics GRAPHICS = Graphics.FromImage(BMP);
private static readonly Font FONT = new Font("Arial", 20);
private static readonly RectangleF RECT = new RectangleF(0, 0, 1000, 1000);
public static bool CheckInvisibleChars(string text)
{
var stringFormat1 = new StringFormat(StringFormatFlags.MeasureTrailingSpaces);
stringFormat1.SetMeasurableCharacterRanges(
Enumerable.Range(0, text.Length - 2).Select(i => new CharacterRange(i, 1)).ToArray());
return GRAPHICS.MeasureCharacterRanges(text, FONT, RECT, stringFormat1).Any(
reg => reg.GetBounds(GRAPHICS).Width.Equals(0f));
}
从这里也应该很容易,以返回隐藏的字符信息等
对我的作品:
text.Contains((char)8203)
和
text.IndexOf((char)8203)
这不工作 – Petr 2014-02-28 13:30:07
@Petr :没有更多的信息,这不是一个有用的评论。请举例说明*它不起作用的地方,或者提出一个新问题。 – 2014-02-28 13:58:58
@Petr它没有工作,因为在零宽度空间字符引用有错误。它应该以十六进制格式指定 - **'\ u200B'**,而不是以DEC格式 - '\ u8203'指定。 – 2016-01-20 13:38:27