Recentemente mi è capitato di dover individuare dei carattere strani all'interno di una stringa PowerShell:
$s = "<p>test  1</p>"
visto che la stringa veniva convertita in Json inizialmente pensavo fosse un problema del metodo di conversione, ConvertTo-Json, che ritornava, ed esempio, i caratteri maggiore e minore con l'escape:
$s | ConvertTo-Json  -Depth 10
dava come risultato:
"\u003cp\u003etest  1\u003c/p\u003e"
anzichè quello che mi aspettavo (ad esempio se lo facevo con il metodo JSON.stringify di JavaScript):
"<p>test  1</p>"
la chiamata ad una API ASP.NET MVC con il metodo Invoke-RestMethod in Post mi ritornava un errore 500.

Per individuare il carattere che provocava l'errore, mi è tornata utile questa funzione:
$s = "<p>test  1</p>"

$i=0; $s.ToCharArray() | % { "$i ) $_ = $([int][char]$_)"; $i++ }
che visualizza la posizione nella stringa, il carattere stampabile e il codice:
0 ) < = 60
1 ) p = 112
2 ) > = 62
3 ) t = 116
4 ) e = 101
5 ) s = 115
6 ) t = 116
7 )   = 32
8 )   = 160
9 ) 1 = 49
10 ) < = 60
11 ) / = 47
12 ) p = 112
13 ) > = 62
il carattere strano, che inaspettatamente faceva fallire la chiamata alla API, era il 160 in posizione 8.
Un replace ha sistemato tutto:
$s = $s.replace([char]160, " ")