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 Sub

Bonjour,

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.

sans titre erreur surlignee

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 Sub

Une 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 Sub

Exemple: 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,

Rechercher des sujets similaires à "connaissez nom type encodage"