2012-04-03 8 views
7

C'è un modo semplice per rilevare (durante il debug), quella stringa contiene qualche carattere nascosto (ad esempio lo spazio di larghezza zero)?Come rilevare i caratteri nascosti nella stringa (ad esempio lo spazio di larghezza zero) durante il debug

Esempio: durante il debug sto paragonando due stringhe differnet e sembrano uguali ai miei occhi. Ovviamente si differenziano in alcuni personaggi nascosti. Come trovare la differenza?

ho usato il metodo string.ToCharArray() nella "finestra immediata" di Visual Studio, ma ci deve essere il modo più confortevole.

risposta

5

ne dite:

text.Contains("\u200B") 

O

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

questo non funzionano – Petr

+2

@Petr : Senza ulteriori informazioni, non è un commento utile. Si prega di fornire un * esempio * di dove non funziona o di fare una nuova domanda. –

+0

@Petr non funzionava perché c'era un errore nel riferimento al carattere dello spazio a larghezza zero. Dovrebbe essere specificato in formato HEX - ** '\ u200B' ** e non come era in formato DEC - '\ u8203'. –

6

È possibile utilizzare questo nella finestra immediata:

str.Contains("\u8203"); 

o metterlo nella finestra di controllo in modo ti basta è necessario fare clic sul pulsante di aggiornamento vicino al valore osservato per vedere il risultato, piuttosto che rientrarlo nell'immediato (anche se tu ! Può sempre premere su e poi entrare a reinserire l'ultimo comando)

per verificare eventuali personaggio nascosto, è possibile avere un array statico con tutti i personaggi nascosti e verificare:

HIDDENS.Any(c => str.Contains(c.ToString()) 

e preferibile anche salvare i personaggi nascosti come stringhe uno di lunghezza e poi fare:

HIDDENS.Any(str.Contains) 

o si potrebbe essere davvero sofisticato e fare questo:

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

Da qui dovrebbe anche essere facile per restituire informazioni su ciascun personaggio nascosto, ecc

+0

Probabilmente non ho scelto un buon titolo per la mia domanda (l'ho già rinominato). Voglio dire come rilevare qualsiasi carattere nascosto (non solo "\ u8203") – cartas

+0

@cartas Controlla la modifica – SimpleVar

+0

La funzione CheckInvisibleChars è cool. Grazie! Btw. c'è qualche modo GUI che "mostra" velocemente personaggi invisibili? Intendo un editore o qualcosa del genere. – cartas

1

Per me funziona:

text.Contains((char)8203) 

e

text.IndexOf((char)8203) 
Problemi correlati