[PowerShell] Suppression des accents
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"
"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