Windows e le codifiche contrastanti

windows-10-flat-wallpaper-for-1440x900-66-861
CC Share-Alike By puscifer91

Avviando un processo da Visual Studio 2022, tramite la classe Process di C#, mi sono imbattuto in un testo al quanto difficile da leggere.

Visual Studio 2022 debug console che mostra l'output del programma SFC

Invece per il comando DISM questo problema non sembra esserci.

Notepad++ e i comandi SFC e DISM

Dal CMD, stampando su file l’output dei due processi, ed analizzando la codifica con Notepad++ (o anche con notepad), è uscito fuori che i file utilizzavano codifiche molto differenti, anche se prodotti dallo stesso terminale

SFC > sfc.txt
notepad++ codifica output di SFC UTF-16 little endian
DISM > dism.txt
notepad++ codifica output di DISM in ANSI

Per il file di SFC la codifica risulta UTF-16 LE (Little Endian), denominato anche Unicode. Per DISM la codifica è quella standard di ANSI.

Ma non sono le uniche stranezze, nel file di SFC, alcuni ritorni a capo, risultano avere solo un solo identificatore, CR, molto strano, Windows solitamente utilizza due identificatori, CRLF.

E con PowerShell come si comporta?

In PowerShell, il terminale più giovane del CMD, impone una sua codifica sui file creati, Unicode con BOM (UTF-16 LE BOM).

notepad++ output del powershell del comando SFC codifica UTF-16 LE BOM
notepad++ output del powershell del comando DISM codifica UTF-16 LE BOM

Tuttavia in PowerShell, l’output di SFC risulta molto distorto, i ritorni a capo sono tutti corretti, ma tra ogni carattere è presente un valore NUL ovvero nullo (0x00). Sembra che l’output del programma non sia conforme ai restanti, o che PowerShell applicando BOM dia fastidio alla codifica.

About the author

alessandrobasi

Appassionato di informatica, scrivo su argomenti tecnici poco conosciuti su cui vale la pena soffermarsi.

Be the first to comment

Rispondi