Si je comprends bien, il s'agit déjà d'une désaccentuation.
Code : Tout sélectionner
; Unicode Normalization Forms
Global Enum $UNF_NormC = 1, $UNF_NormD, $UNF_NormKC = 5, $UNF_NormKD
Func _UNF_Change($sIn, $iForm)
If $iForm = $UNF_NormC Or $iForm = $UNF_NormD Or $iForm = $UNF_NormKC Or $iForm = $UNF_NormKD Then
Local $aRet = DllCall("Normaliz.dll", "int", "NormalizeString", "int", $iForm, "wstr", $sIn, "int", -1, "ptr", 0, "int", 0)
Local $tOut = DllStructCreate("wchar[" & 2 * ($aRet[0] + 20) & "]")
$aRet = DllCall("Normaliz.dll", "int", "NormalizeString", "int", $iForm, "wstr", $sIn, "int", -1, "ptr", DllStructGetPtr($tOut, 1), "int", 2 * ($aRet[0] + 20))
Return DllStructGetData($tOut, 1)
Else
SetError(1, 0, $sIn)
EndIf
EndFunc ;==>_UNF_Change
Func _Unaccent($s, $iMode = 0)
Local Static $aPat = [ _
"(*UCP)[\x{300}-\x{36F}`'¨^¸¯]", _ ; $iMode = 0 : remove combining accents only
"(*UCP)\p{Mn}|\p{Lm}|\p{Sk}" _ ; $iMode = 1 : " " " and modifying letters
]
Return StringRegExpReplace(_UNF_Change($s, $UNF_NormD), $aPat[Mod($iMode, 2)], "")
EndFunc ;==>_Unaccent
Local $aStrings = [ _
"aàâäã cç eéèêë iîï oôöõ uùûü yÿ", _
"AÀÂÄÃ CÇ EÉÈÊË IÎÏ OÔÖÕ UÙÛÜ YŸ", _
"àáâãäåçèéêëìíîïñòóôõöùúûüýåýāāăăąąććĉĉċċččďďǘǚǚǣǣȑȑȓȓȩȩӝӝӟӟ", _ ; scripts latin, cyrillique et autres
"ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝÅÝĀĀĂĂĄĄĆĆĈĈĊĊČČĎĎǗǙǙǢǢȐȐȒȒȨȨӜӜӞӞ" _
]
For $s In $aStrings
MsgBox(0, "", $s & @LF & _Unaccent($s))
Next
Attention, ce code ne fait pas de conversion par compatibilité (au sens Unicode). Par exemple le ı minuscule turc (LATIN SMALL LETTER DOTLESS I) n'est pas converti en "i". De même les caractères Unicode en exposant ou indice ne sont pas convertis en leurs correspondants naturels. Pour faire ça il faut déployer une artillerie plus sérieuse. Si besoin, je peux fournir une DLL fonctionnant avec SQLite qui fait ça et bien plus.
Pour les caractères autres (apostrophes et tout ce qu'on veut), il faut préciser. Un stringregexreplace ferait ça facilement, à priori.
Par curiosité, pour faire tout ça alors que Linux lit parfaitement Unicode, en UTF8 ou autre convention d'encodage ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.