Connaissez-vous le nom de ce type d'encodage ?
Bonjour,
je suis confronté à un fichier généalogique qui contient un codage de caractère dont j'ignore le nom.
Les voyelles accentuées sont codées comme suit:
Précédées de :
- "â" pour les accents aigus
- "á" pour les accents graves
- "ã" pour les accents circonflexe
Puis suivies immédiatement par la voyelle en question exemple : "âe" correspond à "é" et "ãU" à "Û"
Mais j'ai aussi trouvé dans ce fichier un code "ðc" correspondant au "ç" (c cédille minuscule).
J'ai commencé à programmer un petit bout de code qui répond à ces cas mais seulement à ces cas or je le voudrais exhaustif.
Merci donc si vous pouvez m'informer où me documenter sur ce type d'encodage.
Function Translate$(ByVal Texte$)
Dim S, S2
Dim Increment%, p%
Dim Code$, Code2$, oCh$, LettreApresLeCode$
Dim Ascii_code As Byte
On Error GoTo ReturnEmptyString ' En cas d'erreur la fonction renverra une chaine vide
For Each S In Array("â,0", "ã,+1", "á,-1", "ð,0") ' "â" = accent aigu, "á" = accent grave, "ã" = accent circonflexe , "ð" précède la cédille
Increment = CInt(Mid(S, 3)) ' Incrément du Code ASCCI en fonction du type d'accent
Code = Left(S, 1) ' Code peut être soit : "â", "ã", "á", "ð"
p = InStr(Texte, Code) ' Est-ce que le code peut être trouvé ?
If p > 0 Then ' Si oui
oCh = Mid(Texte, p + 1, 1) ' Och est la lettre située immédiatemment après le code
' Cas du c cédille minuscule
If Code & oCh = "ðc" Then Texte = Replace(Texte, "ðc", "ç") ' "ç" (c cédille)
' Voyelles accentuées
For Each S2 In Array("a,225", "A,193", "e,233", "E,201", "i,237", "I,205", "o,243", "O,211", "u,250", "U,218", "y,253", "Y,221")
LettreApresLeCode = Left(S2, 1)
Code2 = Code & LettreApresLeCode
Ascii_code = CByte(Mid(S2, 3))
Texte = Replace(Texte, Code2, Chr(Ascii_code + Increment))
Next S2
End If
Next
Translate = Texte
Exit Function
ReturnEmptyString:
End Function
Private Sub Test()
Debug.Print Translate("Château Mâeráule Châpelle")
Debug.Print Translate("âaâeâiâoâuâyâAâEâIâOâUâY âb")
Debug.Print Translate("áaáeáiáoáuáyáAáEáIáOáUáY áb")
Debug.Print Translate("ãaãeãiãoãuãyãAãEãIãOãUãY ãb")
Debug.Print Translate("Franðcois ðp")
End SubBonjour,
De l'UTF8 peut être ?
Si c'est le cas, voici du code qui va bien
Pierre
Bonjour Pierrep56 et merci pour ta réponse,
Je n'ai pas réussi à faire fonctionner ta macro.
Je maitrise mal le sujet de l'encodage des fichiers mais je pense que mon problème ne se situe pas à un même niveau. Pour lire mon fichier texte j'utilise la fonction FindEncodage du module joint-ici (je ne retrouve plus le classeur complet qui contenait ce module) qui utilise aussi un "ADODB.Stream" qui retrouve le Charset et qui me donne satisfaction. Mais malgré tout subsiste avec un logiciel particulier (Généatique) des caractères qui restent à mettre en forme. Voici une ligne exemple de ce fichier :
2 PLAC Fontainebleau, 77300, Seine et Marne, ãIle-de-France, France, Chãateau
qui décodée devrait s'afficher :
2 PLAC Fontainebleau, 77300, Seine et Marne, Île-de-France, France, Château
J'ai passé pas mal de temps à rechercher sur le web quel pourrait être ce type de codage, en vain…
Bonjour Stéphane1972,
Voir le site qui traite des encodages:Encodage unicode
Et aussi la page ou l'on trouve le caractère d barré oblique (ð):Caractère d
Ensuite par une petite macro il est possible de rechercher tous les caractères particuliers à un texte. Et de les placer dans un tableau.
En effet ton texte n'utilise pas des caractères accentués sauf ceux particuliers. Donc tout caractère ascii au delà de 220 jusqu'à 255.
Sub Tablo()
'Texte à contrôler
Range("H3").Select
'Boucle de recherche de caractères spéciaux tableau en colonne E
For L = 220 To 255
Accent = Chr(L)
T = InStr(1, Range("H3"), Accent)
If T > 0 Then i = i + 1: Range("E" & i) = Mid(Range("H3"), T, 2)
Next L
End SubUne fois inscrit tous les caractères spéciaux du texte. Tu places, ici en colonne F dans mon exemple la lettre accentuée correspondante.
Sub Remplace()
'Texte exemple en H3
'Placer avant en parallèle à la colonne E la lettre accentuée en colonne F.
'Exemple è pour àe, é pour âe etc...
Der = Range("E" & Rows.Count).End(xlUp).Row
For T = 1 To Der
Range("H3").Select
'Tableau de concordance en colonne E et F
Ote = Range("E" & T): Place = Range("F" & T)
Selection.Replace what:=Ote, Replacement:=Place, LookAt:=xlPart, _
SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next T
End SubExemple: avec le texte ci-dessous et en utilisant deux caractères spéciaux âe et àe concordés avec é et è.
| Le bâebâe est en cràeche chez Mamie |
Merci beaucoup X-Cellus pour ta réponse et tes macros, j'ai commencé à regarder tout ça, ton lien me semble super intéressant. Pas le temps tout de suite je regarderai ça plus en détail ce soir et reviendrai sur ce sujet soit pour poser de nouvelles questions soit pour livrer la macro que ta réponse m'aura permis d'écrire.
Slts,