È 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
questo non funzionano – Petr
@Petr : Senza ulteriori informazioni, non è un commento utile. Si prega di fornire un * esempio * di dove non funziona o di fare una nuova domanda. –
@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'. –