Recentemente mi è capitato di dover individuare dei carattere
strani all'interno di una stringa
PowerShell:
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):
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, " ")