Stampare i codici carattere di una stringa in PowerShell
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:
dava come risultato:
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:
che visualizza la posizione nella stringa, il carattere stampabile e il codice:
il carattere strano, che inaspettatamente faceva fallire la chiamata alla API, era il 160 in posizione 8.
Un replace ha sistemato tutto:
PowerShell
$s = "<p>test 1</p>"
PowerShell
$s | ConvertTo-Json -Depth 10
Text
"\u003cp\u003etest 1\u003c/p\u003e"
Text
"<p>test 1</p>"
Per individuare il carattere che provocava l'errore, mi è tornata utile questa funzione:
PowerShell
$s = "<p>test 1</p>"
$i=0; $s.ToCharArray() | % { "$i ) $_ = $([int][char]$_)"; $i++ }
Text
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
Un replace ha sistemato tutto:
PowerShell
$s = $s.replace([char]160, " ")