Accueil > Programmation > [PowerShell] Suppression des accents

[PowerShell] Suppression des accents

lundi 25 novembre 2013


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 chaîne 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.


Enregistrer au format PDF