2012-04-03 27 views
7

如何檢測(在調試期間)該字符串是否包含一些隱藏字符(例如零寬度空間)?如何在調試過程中檢測字符串中的隱藏字符(例如零寬度空間)

示例:在調試過程中,我比較了兩個不同的字符串,它們看起來與我的眼睛相同。當然,他們在一些隱藏的字符中有所不同。如何找到差異?

我在Visual Studio的「立即窗口」中使用了string.ToCharArray()方法,但必須有更舒適的方式。

回答

5

如何:

text.Contains("\u200B") 

或者

text.IndexOf('\u200B') != -1 
+0

這不工作 – Petr 2014-02-28 13:30:07

+2

@Petr :沒有更多的信息,這不是一個有用的評論。請舉例說明*它不起作用的地方,或者提出一個新問題。 – 2014-02-28 13:58:58

+0

@Petr它沒有工作,因爲在零寬度空間字符引用有錯誤。它應該以十六進制格式指定 - **'\ u200B'**,而不是以DEC格式 - '\ u8203'指定。 – 2016-01-20 13:38:27

6

你可以使用這個在即時窗口:

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)); 
} 

從這裏也應該很容易,以返回隱藏的字符信息等

+0

我可能沒有選擇好的標題給我的問題(我已經重新命名了它)。我的意思是如何檢測任何隱藏的字符(不僅僅是「\ u8203」) – cartas 2012-04-03 12:39:17

+0

@cartas檢查編輯 – SimpleVar 2012-04-03 16:12:26

+0

CheckInvisibleChars功能很酷。謝謝! Btw。有沒有任何GUI方式可以快速「顯示」不可見的字符?我的意思是一些編輯或類似的東西。 – cartas 2012-04-04 07:22:46

1

對我的作品:

text.Contains((char)8203) 

text.IndexOf((char)8203) 
相關問題