Voici un petit code permettant de supprimer les accents dans un code PowerShell et ceci quelque soit la langue utilisée.

Surprenant quand on sait la difficulté que l’on a à gérer rien que les accents français.

function Remove-accent([string]$string)
{
    $objD = $string.Normalize([Text.NormalizationForm]::FormD)
    $sb = New-Object Text.StringBuilder

    for($i = 0; $i -lt $objD.Length; $i++) {
        $c = [Globalization.CharUnicodeInfo]::GetUnicodeCategory($objD[$i])
        if($c -ne [Globalization.UnicodeCategory]::NonSpacingMark) {
          [void]$sb.Append($objD[$i])
        }
    }
    return "$sb".Normalize([Text.NormalizationForm]::FormC)
}

Ce code se base sur une propriété de l’encodage Unicode qui est la suivante :

"l’accent est codé un octet distinct du caractère"

Exemple
É sera décomposé de la façon suivante : LATIN CAPITAL LETTER E WITH ACUTE

Le programme transforme donc la chaine en UNICODE puis découpe les octets un à un.

Si l’octet n’est pas un caractère "spécial"

if($c -ne [Globalization.UnicodeCategory]::NonSpacingMark)

on le garde. Reste donc uniquement les caractères alphabétiques purs.

Accueil > Notes Techniques > Windows > [PowerShell] Suppression des accents