如何檢測(在調試期間)該字符串是否包含一些隱藏字符(例如零寬度空間)?如何在調試過程中檢測字符串中的隱藏字符(例如零寬度空間)
示例:在調試過程中,我比較了兩個不同的字符串,它們看起來與我的眼睛相同。當然,他們在一些隱藏的字符中有所不同。如何找到差異?
我在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