FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

 

 Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8

Aller en bas 
4 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 9 Oct 2020 - 3:00

Bonjour à tous !

Le convertisseur UTF-8 vers CP-1252 et inversement, est un utilitaire qui vous permettra de convertir un fichier codé en UTF-8 en un nouveau fichier qui sera compatible avec le langage de programmation Panoramic. L'inverse est également possible : de Panoramic vers UTF-8.

La table ASCII/ANSI (le "CP-1252" pour être plus précis) ayant une capacité maximum de 255 caractères, seuls les principaux caractères français sont convertis parmi les milliers que peut contenir la norme l'UTF-8.

Utilisation :

1) Sélectionnez la langue des menus (par défaut Français) ;

2) Choisissez le sens de conversion CP-1252 vers UTF-8 ou inversement ;

3) Pour CP-1252 vers UTF-8, choisir éventuellement l’ajout de l’entête BOM ;

4) Chargez votre fichier à convertir avec le bouton Ouvrir ou taper votre texte original dans la fenêtre du haut ;

5) Cliquez sur Convertir et patientez. Suivant les ordinateurs, la conversion d’un fichier d'un mégaoctet peut prendre entre 3 et 10 minutes. Toutes les commandes sont bloquées durant ce laps de temps ;

6) Enregistrez votre fichier converti au nouveau format.


La fenêtre du bas vous livre un aperçu du texte converti. A l’aide du clavier, vous pouvez corriger les éventuelles imperfections de la conversion avant d’enregistrer votre texte converti.


Code:
' Convertisseur CP-1252 <--> UTF-8
' Marc - 21 octobre 2020
' http://panoramic.1fr1.net/

dim texteOriginal$, texteTraduit$
dim langage%, sensTranscodage%, bom%
dim reponseUtilisateur%
dim messageUtilisateur$(7)

' langage% = 1 => francais
' langage% = 2 => anglais
' sensTranscodage% = 1 => CP-1252 vers UTF-8
' sensTranscodage% = 2 => UTF-8 vers CP-1252
' bom% = 1 => avec BOM
' bom% = 2 => sans BOM

label redimensionner, langue, francais, english, utf8_cp1252, cp1252_utf8, sensConversion, quitter
label ouvrir, convertir, nouveau, enregistrer
label avecBom, sansBom, choixBom
label legendeTextesSansPoids

creerFenetrePrincipale()

set_focus 0

end
' ----------------------------------------------------------------------
convertir:
    
    set_focus 0
    
    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(1))
        if reponseUtilisateur% = 0 or reponseUtilisateur% = 2
            return
        end_if
    end_if

    conversion()
    
return
' ----------------------------------------------------------------------
sub conversion()

    text 15, chr$(13)+chr$(10) + "   " + messageUtilisateur$(2)

    inactive 0
    
    if sensTranscodage% = 1
        texteOriginal$ = text$(13)
        texteTraduit$ = Ansi_to_Utf8$(texteOriginal$,bom%)
    else
        texteOriginal$ = text$(13)
        texteTraduit$ = Utf8_To_Ansi$(texteOriginal$)
    end_if

    clear 15

    text 15,texteTraduit$

    legendeTextesAvecPoids()

    active 0

    set_focus 0

end_sub
' ----------------------------------------------------------------------
fnc Format$(nombre$,separateur$)
   dim_local p
   p=len(nombre$)+1
   while p>4
      p=p-3
      nombre$=insert$(nombre$,separateur$,p)
   end_while
   result nombre$
end_fnc
' ----------------------------------------------------------------------
fnc Utf8_To_Ansi$(utf8$)
    dim_local texteAnsi$, index%, bom$, longueurUTF8%, caracterecourant$, caracteresuivant$

    longueurUTF8% = len(utf8$)

    index% = 1

    ' suppression entete BOM (EF BB BF) s'il existe
    bom$ = chr$(239) + chr$(187) + chr$(191)
    if instr(utf8$,bom$) = 1
        index% = index% + 3
    end_if

    while index% <= longueurUTF8%

        caracterecourant$ = mid$(utf8$,index%,1)
        caracteresuivant$ = mid$(utf8$,index%+1,1)

    if asc(caracterecourant$) = 10 or asc(caracterecourant$) = 13  
        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 13
            texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
            index% = index% + 1
        else
            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                index% = index% + 1
            else
                if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                index% = index% + 1
                else
                    if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 13
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                        index% = index% + 1
                    else
                        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                        else
                            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                            end_if
                        end_if
                    end_if    
                end_if
            end_if
        end_if
    else
        if asc(caracterecourant$) < 128
            texteAnsi$ = texteAnsi$ + caracterecourant$
        else
            if asc(caractereCourant$) = 226 and asc(caracteresuivant$) = 130 and asc(mid$(utf8$,index%+2,1)) = 172
                texteAnsi$ = texteAnsi$ + chr$(128)
                index% = index% + 2
            else
                if asc(caracterecourant$) = 194
                    index% = index% + 1
                    caracterecourant$ = MID$(utf8$,index%,1)
                    texteAnsi$ = texteAnsi$ + caracterecourant$
                else
                    if asc(caracterecourant$) = 195
                        index% = index% + 1
                        caracterecourant$ = MID$(utf8$,index%,1)
                        texteAnsi$ = texteAnsi$ + chr$(ASC(caracterecourant$) + 64)
                    else
                        texteAnsi$ = texteAnsi$ + caracterecourant$
                    end_if
                end_if    
            end_if              
        end_if
    end_if
        index% = index% + 1
    end_while    
        
    result texteAnsi$

end_fnc
' ----------------------------------------------------------------------
fnc Ansi_to_Utf8$(texteAnsi$,BOM%)
    dim_local texteUtf8$, index%, bom$, longueurAnsi%, caracterecourant$, caracteresuivant$

    longueurAnsi% = len(texteAnsi$)

    index% = 1
    
    if BOM% = 1
        texteUtf8$ = chr$(239) + chr$(187) + chr$(191)
    end_if

    while index% <= longueurAnsi%

        caracterecourant$ = mid$(texteAnsi$,index%,1)
        
        if asc(caracterecourant$) < 128
            texteUtf8$ = texteUtf8$ + caracterecourant$
        else
            if asc(caracterecourant$) = 128 :' encodage caractere EURO
                texteUtf8$ = texteUtf8$ + chr$(226) + chr$(130) + chr$(172)      
            else
                if asc(caracterecourant$) < 192
                    texteUtf8$ = texteUtf8$ + chr$(194) + caracterecourant$
                else
                    texteUtf8$ = texteUtf8$ + chr$(195) + chr$(asc(caracterecourant$) - 64)
                end_if            
            end_if
        end_if
    
    index% = index% + 1

    end_while        

    result texteUtf8$

end_fnc
' ----------------------------------------------------------------------
ouvrir:
    SubOuvrirFichier()
return
' ----------------------------------------------------------------------
sub SubOuvrirFichier()
    dim_local fichier$

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(3))
        if reponseUtilisateur% = 0
            exit_sub
        end_if
        if reponseUtilisateur% = 1
             enregistrement()
             exit_sub
        end_if
    end_if

    CLEAR 13
    CLEAR 15

    legendeTextesAvecPoids()

    if object_exists(30) = 0
        open_dialog 30
    end_if

'    DIR_DIALOG 30,
'    FILTER 30,"Fichiers .bas .txt|*.txt;*.bas"
    fichier$ = FILE_name$(30)

    if fichier$ = "_"
        exit_sub
    end_if

    file_load 13,fichier$
END_sub
' ----------------------------------------------------------------------
nouveau:
    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))

        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    clear 13
    clear 15

    legendeTextesAvecPoids()

    set_focus 0
return
' ----------------------------------------------------------------------
enregistrer:
    enregistrement()
return
' ----------------------------------------------------------------------
sub enregistrement()
    dim_local a$
    
    if object_exists(31) = 0
        save_dialog 31
    end_if

        if text$(15) = ""
            message messageUtilisateur$(5)
            exit_sub
        end_if
'        FILTER 31,
'        DIR_DIALOG 31,
'        FILE_DIALOG 31,
        a$ = FILE_name$(31)
        if a$ = "_" OR a$ = "" then exit_sub
        if FILE_EXISTS(a$) = 1
            if message_confirmation_yes_no(messageUtilisateur$(6)) <> 1 then exit_sub
        end_if

        file_save 15,a$
    
END_sub
' ----------------------------------------------------------------------
sub creerFenetrePrincipale()
    width 0,1200
    height 0,750
    left 0,(SCREEN_X - width(0))/2
    top 0,(SCREEN_Y - height(0))/2
    color 0,100,150,200
    on_resize 0,Redimensionner

    ' commutateur de gauche
    picture 1
    left 1,45
    top 1,20
    height 1,50
    width 1,20
    color 1,100,150,200
    2d_target_is 1
    2d_PEN_color 255,255,255
    2d_line 8,0,12,0
    2d_line 6,1,14,1
    2d_line 4,2,16,2
    2d_line 3,3,17,3
    2d_rectangle 2,4,18,6
    2d_rectangle 1,6,19,8
    2d_rectangle 0,8,20,42
    2d_rectangle 1,42,19,44
    2d_rectangle 2,44,18,46
    2d_line 3,46,17,46
    2d_line 4,47,16,47
    2d_line 6,48,14,48
    2d_line 8,49,12,49
    2d_pen_color 30,30,30
    2d_fill_color 30,30,30
    2d_circle 10,10,8
    cursor_point 1
    on_click 1,sensConversion

    alpha 2
    left 2,70
    top 2,22
    color 2,100,150,200
    font_color 2,0,0,0
    font_size 2,10
    caption 2,"CP-1252 -> UTF-8"
    cursor_point 2
    on_click 2,cp1252_utf8
    
    alpha 3
    left 3,70
    top 3,52
    color 3,100,150,200
    font_color 3,0,0,0
    font_size 3,10
    caption 3,"UTF-8 -> CP-1252"
    cursor_point 3
    on_click 3,utf8_cp1252

    ' contacteur de droite Fr/En
    picture 4
    top 4,20
    height 4,50
    width 4,20
    color 4,100,150,200
    2d_target_is 4
    2d_PEN_color 255,255,255
    2d_line 8,0,12,0
    2d_line 6,1,14,1
    2d_line 4,2,16,2
    2d_line 3,3,17,3
    2d_rectangle 2,4,18,6
    2d_rectangle 1,6,19,8
    2d_rectangle 0,8,20,42
    2d_rectangle 1,42,19,44
    2d_rectangle 2,44,18,46
    2d_line 3,46,17,46
    2d_line 4,47,16,47
    2d_line 6,48,14,48
    2d_line 8,49,12,49
    2d_pen_color 30,30,30
    2d_fill_color 30,30,30
    2d_circle 10,10,8
    cursor_point 4
    on_click 4, langue

    alpha 5
    top 5,22
    color 5,100,150,200
    font_color 5,0,0,0
    font_size 5,10
    caption 5,"En"
    cursor_point 5
    on_click 5,english
    
    alpha 6
    top 6,52
    color 6,100,150,200
    font_color 6,0,0,0
    font_size 6,10
    caption 6,"Fr"
    cursor_point 6
    on_click 6,francais

    ' commutateur BOM
    picture 7
    top 7,20
    height 7,50
    width 7,20
    color 7,100,150,200
    2d_target_is 7
    2d_PEN_color 255,255,255
    2d_line 8,0,12,0
    2d_line 6,1,14,1
    2d_line 4,2,16,2
    2d_line 3,3,17,3
    2d_rectangle 2,4,18,6
    2d_rectangle 1,6,19,8
    2d_rectangle 0,8,20,42
    2d_rectangle 1,42,19,44
    2d_rectangle 2,44,18,46
    2d_line 3,46,17,46
    2d_line 4,47,16,47
    2d_line 6,48,14,48
    2d_line 8,49,12,49
    2d_pen_color 30,30,30
    2d_fill_color 30,30,30
    2d_circle 10,10,8
    cursor_point 7
    on_click 7,choixBom

    alpha 8
    top 8,22
    color 8,100,150,200
    font_color 8,0,0,0
    font_size 8,10
    cursor_point 8
    on_click 8,sansBom
    
    alpha 9
    top 9,52
    color 9,100,150,200
    font_color 9,0,0,0
    font_size 9,10
    cursor_point 9
    on_click 9, avecBom

    ' légende memo du haut
    alpha 11
    color 11,100,150,200
    top 11,80
    font_size 11,12
    left 11,30
    font_color 11,255,255,255

    ' memo du haut texte original
    memo 13
    left 13,25
    top 13,105
    bar_both 13
    color 13,20,20,20
    font_color 13,255,255,255
    font_name 13,"Calibri"
    font_size 13,12
    on_change 13,legendeTextesSansPoids

    ' legende memo du bas
    alpha 14
    color 14,100,150,200
    font_size 14,12
    left 14,30
    font_color 14,255,255,255
 
    ' memo du bas texte traduit
    memo 15
    left 15,25
    bar_both 15
    color 15,20,20,20
    font_color 15,255,255,255
    font_name 15,"Calibri"
    font_size 15,12
    on_change 15,legendeTextesSansPoids

    ' bouton Ouvrir
    button 16
    left 16,50
    font_size 16,10
    cursor_point 16
    on_click 16,ouvrir

    ' bouton Nouveau
    button 17
    left 17,125
    font_size 17,10
    cursor_point 17
    on_click 17,nouveau
 
    ' bouton Convertir
    button 18
    left 18,200
    font_size 18,10
    cursor_point 18
    on_click 18,convertir

    ' bouton Enregistrer
    button 19
    left 19,275
    font_size 19,10
    cursor_point 19
    on_click 19,enregistrer

    alpha 20
    font_color 20,255,255,255
    font_size 20,10
    caption 20,"Marc - http://panoramic.1fr1.net"
    
    ' titre 1/2
    alpha 21
    color 21,100,150,200
    font_color 21,255,255,255

    ' titre 2/2
    alpha 22
    color 22,100,150,200
    font_color 22,255,255,255

    on_close 0,quitter

    sensTranscodage% = 1 :' CP-1252 vers UTF8 par defaut

    langage% = 1 :' Francais par defaut

    subLangue()

    actualiserAffichage()
  
END_sub
' ----------------------------------------------------------------------
avecBom:
    bom% = 1
    actualiserAffichage()
    
    if text$(15) <> ""
        conversion()
    end_if
    
return
' ----------------------------------------------------------------------
sansBom:
    bom% = 2
    actualiserAffichage()
    
    if text$(15) <> ""
        conversion()
    end_if

return
' ----------------------------------------------------------------------
choixBom:
    if bom% = 1
        bom% = 2
    else
        bom% = 1
    end_if
    actualiserAffichage()
    
    if text$(15) <> ""
        conversion()
    end_if
          
return
' ----------------------------------------------------------------------
utf8_cp1252:

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))
        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    text 15,""

    set_focus 0

    sensTranscodage% = 2
    actualiserAffichage()
return
' ----------------------------------------------------------------------
cp1252_utf8:

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))
        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    text 15,""

    set_focus 0

    sensTranscodage% = 1
    actualiserAffichage()
return
' ----------------------------------------------------------------------
sensConversion:

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))
        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    text 15,""

    set_focus 0

    if sensTranscodage% = 1
        sensTranscodage% = 2
    else    
        sensTranscodage% = 1
    end_if
    actualiserAffichage()    
return
' ----------------------------------------------------------------------
francais:
    langage% = 1
    subLangue()
return
' ----------------------------------------------------------------------
english:
    langage% = 2
    subLangue()
return
' ----------------------------------------------------------------------
langue:

    if langage% = 1
        langage% = 2
        subLangue()
    else
        langage% = 1
        subLangue()
    end_if
        
return
' ----------------------------------------------------------------------
sub subLangue()
    
    if langage% = 1 :' francais
        caption 9,"Avec BOM"
        caption 8,"Sans BOM"
        caption 16,"Ouvrir"
        caption 17,"Nouveau"
        caption 18,"Convertir"
        caption 19,"Enregistrer"

      
        application_title "Convertisseur CP1252 <-> UTF-8"
        caption 0,"Convertisseur CP1252 <-> UTF-8"
        
        2d_target_is 4
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,40,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,10,8

        messageUtilisateur$(1) = "Souhaitez-vous recommencer la conversion du fichier ?"
        messageUtilisateur$(2) = "Patientez SVP, traitement en cours..."
        messageUtilisateur$(3) = "Souhaitez-vous enregistrer le projet en cours avant d'en ouvrir un nouveau ?"
        messageUtilisateur$(4) = "Souhaitez-vous enregistrer le projet en cours ?"
        messageUtilisateur$(5) = "Enregistrement impossible : Votre projet est vide !"
        messageUtilisateur$(6) = "Le fichier existe. Le remplacer ?"
        messageUtilisateur$(7) = "Souhaitez-vous enregistrer le projet en cours avant de quitter ?"

    else
        caption 9,"With BOM"
        caption 8,"Without BOM"
        caption 16,"Load"
        caption 17,"New"
        caption 18,"Convert"
        caption 19,"Save"

        APPLICATION_TITLE "CP1252 <-> UTF-8 Converter"
        caption 0,"CP1252 <-> UTF-8 Converter"

        2d_target_is 4
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,10,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,40,8

        messageUtilisateur$(1) = "Do you want to start converting the file again?"
        messageUtilisateur$(2) = "Please wait, processing in progress ..."
        messageUtilisateur$(3) = "Do you want to save the current project before opening a new one?"
        messageUtilisateur$(4) = "Do you want to save the current project?"
        messageUtilisateur$(5) = "Cannot save: Your project is empty!"
        messageUtilisateur$(6) = "The file exists. Replace it ?"
        messageUtilisateur$(7) = "Would you like to save the current project before exiting?"

    end_if

    legendeTextesAvecPoids()
    actualiserAffichage()

end_sub
' ----------------------------------------------------------------------
sub legendeTextesAvecPoids()

    if langage% = 1 :' francais
        if len(text$(13)) < 2
            caption 11,"Texte original : " + str$(len(text$(13))) + " octet"
        else
            caption 11,"Texte original : " + str$(len(text$(13))) + " octets"
        end_if    

        if len(text$(15)) < 2
            caption 14,"Aperçu texte converti : " + str$(len(text$(15)))+" octet"
        else    
            caption 14,"Aperçu texte converti : " + str$(len(text$(15)))+" octets"
        end_if    
    else
        if len(text$(13)) < 2
            caption 11,"Original text: " + str$(len(text$(13))) + " byte"
        else
            caption 11,"Original text: " + str$(len(text$(13))) + " bytes"
        end_if    

        if len(text$(15)) < 2
            caption 14,"Preview converted text: " + str$(len(text$(15)))+" byte"
        else    
            caption 14,"Preview converted text: " + str$(len(text$(15)))+" bytes"
        end_if    
    end_if

end_sub
' ----------------------------------------------------------------------
legendeTextesSansPoids:

    if langage% = 1 :' francais
        caption 11,"Texte original : "
        caption 14,"Aperçu texte converti : "
    else
        caption 11,"Original text: "
        caption 14,"Preview converted text: "
     end_if

return
' ----------------------------------------------------------------------
Redimensionner:
    actualiserAffichage()
return
' ----------------------------------------------------------------------
sub actualiserAffichage()
    dim_local titre1$, titre2$
    
    off_resize 0

    if sensTranscodage% = 1

        show 7
        show 8
        show 9

        2d_target_is 1
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,10,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,40,8

        if langage% = 1
            titre1$ = "Conversion"
            titre2$ = "CP-1252 vers UTF-8"
            left 8,width_client(0) - 188
        else
            titre1$ = "CP-1252 to UTF-8"
            titre2$ = "Conversion"
           left 8,width_client(0) - 206
        end_if

    else

        hide 7
        hide 8
        hide 9

        2d_target_is 1
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,40,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,10,8

        if langage% = 1
            titre1$ = "Conversion"
            titre2$ = "UTF-8 vers CP-1252"
        else
            titre1$ = "UTF-8 to CP-1252"
            titre2$ = "Conversion"
        end_if    

    end_if
    
    if bom% = 1
        2d_target_is 7
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,40,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,10,8
    else
        2d_target_is 7
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,10,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,40,8
    end_if
    
    if width(0) < 680
        width 0,680
    end_if

    if height(0) < 400
        height 0,400
    end_if
    
    if width_client(0) < 1080
        font_size 21,20
        top 21,16
        left 21,(width_client(0) - text_width(titre1$,21))/2
        caption 21,titre1$
        
        show 22
        font_size 22,20
        top 22,55
        left 22,(width_client(0) - text_width(titre2$,22))/2
        caption 22,titre2$
    else
        hide 22
        font_size 21,30
        top 21,24
        left 21,(width_client(0) - text_width(titre1$ + " " + titre2$,21))/2
        caption 21,titre1$ + " " + titre2$
    end_if

    width 13,width_client(0)-50
    width 15,width_client(0)-50

    left 20,width_client(0) - text_width("Marc - http://panoramic.1fr1.net",20) - 10
    top 20,height_client(0)-20

    left 4,width_client(0) - 65
    left 5,width_client(0) - 83
    left 6,width_client(0) - 83
    left 7,width_client(0) - 125
    left 9,width_client(0) - 188

    top 16,height_client(0)-50
    top 17,height_client(0)-50
    top 18,height_client(0)-50
    top 19,height_client(0)-50


    height 13,(height_client(0)-225)/2
    height 15,(height_client(0)-225)/2
    top 15,height(13)+150

    top 14,105 + height(13) + 20


    on_resize 0,Redimensionner
end_sub
' ----------------------------------------------------------------------
quitter:
    CLOSE_INACTIVE
    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(7))
        if reponseUtilisateur% = 0
            return
        end_if
        if reponseUtilisateur% = 1
            enregistrement()
            terminate
        end_if
    end_if
    CLOSE_ACTIVE
return


Dans la vue ci-dessous, pour démonstration, j’ai chargé un fichier texte au format UTF-8 et j'ai lancé la conversion :

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Conver12


Bonne programmation à tous !

EDIT du 21octobre 2020 : le code a été mis à jour.


Dernière édition par Marc le Jeu 22 Oct 2020 - 0:19, édité 9 fois
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 9 Oct 2020 - 13:43

Intéressant ! j'ai déjà été confronté à ce problème...
Dommage qu'on n'ait pas un fichier à traduire pour s'entraîner, ne serait-ce que ton exemple, là rapidement je n'en ai pas trouvé...
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 9 Oct 2020 - 15:21

JL35 a écrit:
Dommage qu'on n'ait pas un fichier à traduire pour s'entraîner, ne serait-ce que ton exemple, là rapidement je n'en ai pas trouvé...

Voici un lien pour télécharger un petit bout de code basic codé en UTF-8 :

https://mon-partage.fr/f/fle3xsza/

Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 9 Oct 2020 - 15:42

Merci Marc, je vais faire joujou avec ça !
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 9 Oct 2020 - 16:19

Je me suis permis d'en faire une petite sub plus universelle, pour mes archives:
Code:
DIM f$,fr$
font_size 0,10
MEMO 1: FULL_SPACE 1
f$ = "C:\Telechar\testUTF8.bas"
fr$ = "Z:\Result.txt"
if file_exists(fr$) = 1 THEN file_delete fr$
UTF8ToTxt(f$)
file_open_write 1,fr$
    file_writeln 1,clipboard_string_paste$
file_close 1
file_load 1,fr$
END

SUB UTF8ToTxt(f$)
  ' Conversion d'un fichier f$ codé UTF8 en texte pur -> clipboard
    DIM_LOCAL r$,c$,rc$,txt$,lf%,idx%,a%,a1%
    r$ = CHR$(13): c$ = CHR$(10): rc$ = r$+c$
    FILEBIN_OPEN_READ 11,f$: lf% = FILEBIN_SIZE(11)
    WHILE idx% < lf%
        FILEBIN_READ 11,a%
        IF a% = 13 OR a% = 10
            FILEBIN_READ 11,a1%
            IF a% = 10
                IF a1% = 10
                    txt$ = txt$ + rc$ + r$ + CHR$(a1%)
                ELSE         
                    IF a1% = 13
                        txt$ = txt$ + rc$
                    ELSE
                        txt$ = txt$ + rc$ + CHR$(a1%)
                    END_IF
                END_IF
            ELSE
                IF a1% = 10
                    txt$ = txt$ + rc$
                ELSE
                    txt$ = txt$ + rc$ + CHR$(a1%)
                END_IF
            END_IF         
        ELSE
            IF a% < 128
                txt$ = txt$ + CHR$(a%)
            ELSE
                IF a% = 194
                    FILEBIN_READ 11,a1%: txt$ = txt$ + CHR$(a1%)
                ELSE
                    IF a% = 195
                        FILEBIN_READ 11,a1%: txt$ = txt$ + CHR$(a1%+64)
                    END_IF
                END_IF
            END_IF
        END_IF
        idx% = idx%+1
    END_WHILE
    CLIPBOARD_STRING_COPY txt$
    FILEBIN_CLOSE 11
END_SUB
Je précise bien: entièrement pompée sur ton code !
J'ai retrouvé dans mes archives une sub contenant un code vbscript qui était censée faire le même boulot,
mais manifestement ça ne marche pas, alors, pas de regrets.

PS correction d'une petite erreur dans la sub...
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 9 Oct 2020 - 18:26

Hum intéressant tout ça.

Merci à tous les 2 pour le partage ! geek
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptySam 10 Oct 2020 - 0:51

Merci JL35 pour tes tests !

J’ai omis de mettre dans ma démonstration les lettres majuscules accentuées et le C cédille majuscule qui sont pris en charge également.

Nouvelle capture d’écran avec une ligne supplémentaire de quelques lettres majuscules accentuées :
Spoiler:
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptySam 10 Oct 2020 - 11:32

Bonjour Marc, et les autres !

Je viens de faire une petite expérience UTF8.
Et je me suis aperçu que MEMO_RICH est capable de lire les fichiers codés ainsi,
donc de faire la conversion lui-même.
Une petite illustration (le répertoire de manoeuvre est à adapter):
Code:
DIM rr$,f$,f1$,fr$,i%
rr$ = "Z:": ' répertoire de manoeuvre
f$ = rr$+"Test.bas": ' texte encodé en UTF8
f1$ = rr$+"Convt.txt": ' changement de nom, pour Memo_Rich
IF FILE_EXISTS(f1$) = 1 THEN FILE_DELETE f1$
FILE_COPY f$,f1$
fr$ = rr$+"Result.txt": ' texte décodé
MEMO_RICH 1: HIDE 1: WIDTH 1,900
FILE_LOAD 1,f1$: FILE_DELETE f1$
FILE_OPEN_WRITE 1,fr$
FOR i% = 1 TO COUNT(1)
    FILE_WRITELN 1,ITEM_READ$(1,i%)
NEXT i%
FILE_CLOSE 1
END
A ma connaissance, Memo_Rich ne sait lire que les fichiers avec extension .txt ou .rtf,
en tout cas pas les .bas, donc il m'a fallu renommer ou mieux recopier le fichier d'origine en .txt

D'où la sub:
Code:
SUB Utf8ToTxt(f$,fr$)
  ' Conversion d'un fichier codé Utf8 en texte pur (.txt)
  DIM_LOCAL rr$,f1$,i%
  rr$ = "Z:": ' répertoire de manoeuvre, à adapter
  f1$ = rr$+"Convt.txt": ' changement de nom, pour Memo_Rich
  IF FILE_EXISTS(f1$) = 1 THEN FILE_DELETE f1$
  FILE_COPY f$,f1$
  MEMO_RICH 800: HIDE 800: WIDTH 800,900
  FILE_LOAD 800,f1$: FILE_DELETE f1$
  FILE_OPEN_WRITE 1,fr$
      FOR i% = 1 TO COUNT(800)
          FILE_WRITELN 1,ITEM_READ$(800,i%)
      NEXT i%
  FILE_CLOSE 1
  DELETE 800
END_SUB
Quelque chose m'a échappé...?

PS 11/10
EFFECTIVEMENT QUELQUE CHOSE M'A ÉCHAPPÉ, JE N'ARIVE PAS A REPRODUIRE LE FONCTIONNEMENT ...
DONC... POST ANNULÉ


Dernière édition par JL35 le Dim 11 Oct 2020 - 15:31, édité 1 fois
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptySam 10 Oct 2020 - 12:40

Bonjour à tous !

scratch Chez moi ça ne fonctionne pas avec un MEMO_RICH et un fichier .txt natif en UTF-8.

Je ferai des essais après déjeuner.

Bon app' à tous !

Avec EliP et MakeExe.exe :
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Jl35_b10

Avec Panoramic Editor :
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Jl351_10


EDIT : Me voilà de retour !

JL35 a écrit:
Et je me suis aperçu que MEMO_RICH est capable de lire les fichiers codés ainsi
Je suppose que tu voulais dire UTF-8 au lieu de ANSI ?

@JL35
J’ai fait quelques essais avec ton dernier source ci-dessus.

J’y ai ajouté deux lignes pour afficher un contrôle visuel dans un MEMO_RICH du fichier Result.txt.

Ligne 15 => MEMO_RICH 10
Ligne 16 => FILE_LOAD 10,rr$+"Result.txt"

Malheureusement, le fichier de sortie Result.txt est toujours en UFT-8.

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Jl352_10
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptySam 10 Oct 2020 - 16:36

Mince ! ça ne marche plus chez moi non plus ! Qu'est-ce que j'ai fabriqué ?
J'ai dû me mélanger les pinceaux... bon, je regarde...

PS J'ai bien écrit '... les fichiers codés ainsi' (et non ANSI), c'est à dire codés UTF8...

PS2
Bon, eh bien je n'arrive pas à reproduire ce que j'ai fait ce matin avec cette sub,
(j'avais fait un dump du fichier résultat pour vérifier son contenu, bien texte pur)
donc a priori elle ne marche pas et est inutilisable en l'état... désolé...
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyLun 12 Oct 2020 - 12:30

Bonjour à tous !

Après de multiples essais de conversion de fichiers UTF-8 vers Panoramic, je constate que le taux de réussite est moyen voire médiocre.

Un nouvel algorithme de décodage est en cours avec la prise en charge de la suppression de l’entête BOM (byte order mark).

Pour en savoir plus sur BOM, c’est ici : https://fr.wikipedia.org/wiki/Indicateur_d'ordre_des_octets

A bientôt !
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyLun 12 Oct 2020 - 13:09

Bon courage en tout cas Marc,
j'ai jeté un oeil sur ton lien, le moins qu'on puisse dire c'est que ce n'est pas très lumineux !
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyLun 12 Oct 2020 - 21:28

Bonsoir Marc,

Toi qui sais tout (un peu de pommade n'a jamais fait de mal à personne  Wink )
J'ai fait des essais avec Powershell, je peux convertir un fichier texte simple en UTF8:
Code:
SUB TxtToUTF8(f$,fr$)
  ' Conversion fichier texte f$ en encodage UTF8 -> fr$
  EXECUTE_WAIT "Powershell.exe|get-content -path "+f$+" | out-file "+fr$+" -encoding utf8"  
END_SUB

Mais je n'arrive pas à faire l'inverse, j'ai peut-être mal codé (notamment l'option -encoding),
crois-tu que ce soit possible ?
Code:
SUB UTF8ToTxt(f$,fr$)
  ' Conversion f$ encodage UTF8 en texte simple -> fr$
  EXECUTE_WAIT "Powershell.exe|get-content -path "+f$+" | out-file "+fr$+" -encoding ascii"  
END_SUB
Ça ne marche pas (pas d'erreur, mais pas de traitement des lettres accentuées, traduites par ?).
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyLun 12 Oct 2020 - 23:51

Bonsoir JL35 !

JL35 a écrit:
Toi qui sais tout

Oh non, de très très loin !  J’en apprends tous les jours.

Pour ton codage UTF-8 vers ASCII, c’est possible mais… ASCII c’est sur 7 bits, soit 00 à 7F. Les accents sont dans la partie étendue du code ASCII : ANSI CP-1252 pour nous en Europe de l’ouest.

Cette partie étendue va de 80 à FF et possèdent les lettres accentuées minuscules et majuscules.

Séquence nostalgie : pour les anciens, sous DOS, nous utilisions le Code Page 437 ou 850. Nous avions les lettres accentuées minuscules (pas en majuscules) et plein de caractères semi-graphiques qui nous permettaient de dessiner de beaux tableaux avec des lignes simples ou doubles. Very Happy


Je referme la parenthèse nostalgie. Pour en revenir à nos moutons. Donc, si tu convertis en ASCII, tu perdras toutes les lettres accentuées :

Précédent deviendra Pr ?c ?dent.  
Le ? indique un caractère qui n’existe pas.
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyMar 13 Oct 2020 - 12:14

Bonjour Marc,

Eh bien merci pour tes explications très claires, donc a priori ce n'est pas possible dans le sens UTF8 vers Ascii 16 bits, dommage...

Et incidemment je me souviens très bien de la police utilisée sous MsDos et Basic avec les caractères graphiques, bien pratiques
pour dessiner des figures (rectangulaires) en simple ou double trait.
Équivalent de la police 'Terminal' de maintenant, je pense...

Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyJeu 15 Oct 2020 - 2:59

Bonjour à tous !

Voici le nouveau code pour la conversion UTF-8 vers ASCII/ANSI.

Code:
' Conversion UTF-8 vers ASCII/ANSI
' Marc - 15 octobre 2020
' http://panoramic.1fr1.net/

DIM fichier$, texte$, extension$, a$, b$, reponse%, modif%, texteUTF8$, texteANSI$
LABEL ouvrir, enregistrer, formatFenetre, modifie, quitter
creerFenetrePrincipale()
affichageAide()
END
' ----------------------------------------------------------------------
ouvrir:
    SubNouveauFichier()
RETURN
' ----------------------------------------------------------------------
SUB SubNouveauFichier()
    DIM_LOCAL texteMessage$, reponseUtilisateur%

    IF modif% = 1
        texteMessage$ = "Souhaitez-vous enregistrer le projet en cours avant d'en ouvrir un nouveau ?"
        reponseUtilisateur% = MESSAGE_CONFIRMATION_YES_NO(texteMessage$)
        IF reponseUtilisateur% = 0
            EXIT_SUB
        END_IF
        IF reponseUtilisateur% = 1
             enregistrement()
             EXIT_SUB
        END_IF
    END_IF

    CLEAR 3
    CLEAR 4
    CLEAR 5
    texte$ =""

    IF OBJECT_EXISTS(10) = 0
        OPEN_DIALOG 10
    END_IF

    FILTER 10,"Fichiers .bas .txt|*.txt;*.bas"
    fichier$ = FILE_NAME$(10)

    IF fichier$ = "_"
        EXIT_SUB
    END_IF

    FILE_LOAD 3,fichier$
    texteUTF8$ = TEXT$(3)
    texte$ = CHR$(13)+CHR$(10) + "   Patientez SVP, traitement en cours..."
    TEXT 4,texte$
    texte$ = ""
    TexteANSI$ = Utf8_To_Ansi$(texteUTF8$)
    CLEAR 4
    afficher()
END_SUB
' ----------------------------------------------------------------------
SUB afficher()
    extension$ = FILE_EXTRACT_EXTENSION$(fichier$)
    extension$ = LOWER$(extension$)
    IF extension$ = ".bas"
        SHOW 5
        HIDE 4
        TEXT 5,TexteANSI$
    ELSE
        SHOW 4
        HIDE 5
        TEXT 4,TexteANSI$    
    END_IF
    modif% = 1
END_SUB
' ----------------------------------------------------------------------
fnc Utf8_To_Ansi$(utf8$)
    dim_local texteAnsi$, index%, bom$, longueurUTF8%, caracterecourant$, caracteresuivant$

    longueurUTF8% = len(utf8$)

    index% = 1

    ' suppression entete BOM (EF BB BF) s'il existe
    bom$ = chr$(239) + chr$(187) + chr$(191)
    if instr(utf8$,bom$) = 1
        index% = index% + 3
    end_if

    while index% <= longueurUTF8%

        caracterecourant$ = mid$(utf8$,index%,1)
        caracteresuivant$ = mid$(utf8$,index%+1,1)

    if asc(caracterecourant$) = 10 or asc(caracterecourant$) = 13  
        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 13
            texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
            index% = index% + 1
        else
            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                index% = index% + 1
            else
                if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                index% = index% + 1
                else
                    if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 13
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                        index% = index% + 1
                    else
                        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                        else
                            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                            end_if
                        end_if
                    end_if    
                end_if
            end_if
        end_if
    else
        if asc(caracterecourant$) < 128
            texteAnsi$ = texteAnsi$ + caracterecourant$
        else
            if asc(caracterecourant$) = 194
                index% = index% + 1
                caracterecourant$ = MID$(utf8$,index%,1)
                texteAnsi$ = texteAnsi$ + caracterecourant$
            else
                if asc(caracterecourant$) = 195
                    index% = index% + 1
                    caracterecourant$ = MID$(utf8$,index%,1)
                    texteAnsi$ = texteAnsi$ + CHR$(ASC(caracterecourant$) + 64)
                else
                    texteAnsi$ = texteAnsi$ + caracterecourant$
                end_if    
            end_if              
        end_if
    end_if
        index% = index% + 1
    end_while    
        
    result texteAnsi$

end_fnc
' ----------------------------------------------------------------------
enregistrer:
    enregistrement()
RETURN
' ----------------------------------------------------------------------
SUB enregistrement()

    IF OBJECT_EXISTS(11) = 0
        SAVE_DIALOG 11
    END_IF

    IF extension$ = ".bas"
        IF TEXT$(5) = ""
            MESSAGE "Enregistrement impossible : Votre projet est vide !"
            EXIT_SUB
        END_IF
        FILTER 11,"Fichier Basic|*.bas"
       ' DIR_DIALOG 11,
        FILE_DIALOG 11,fichier$
        a$ = FILE_NAME$(11)
        IF a$ = "_" OR a$ = "" THEN EXIT_SUB
        b$=UPPER$(a$)
        IF RIGHT$(b$,4) <> ".BAS" THEN a$ = a$+".bas"
        IF FILE_EXISTS(a$) = 1
            IF MESSAGE_CONFIRMATION_YES_NO("Le fichier existe. Le remplacer ?") <> 1 THEN EXIT_SUB
        END_IF
        FILE_SAVE 5,a$
    ELSE
        IF TEXT$(4) = ""
            MESSAGE "Enregistrement impossible : Votre projet est vide !"
            EXIT_SUB
        END_IF
        FILTER 11,"Fichier texte|*.txt"
       ' DIR_DIALOG 11,
        FILE_DIALOG 11,fichier$
        a$ = FILE_NAME$(11)
        IF a$ = "_" OR a$ = "" THEN EXIT_SUB
        b$=UPPER$(a$)
        IF RIGHT$(b$,4) <> ".TXT" THEN a$ = a$+".txt"
        IF FILE_EXISTS(a$) = 1
            IF MESSAGE_CONFIRMATION_YES_NO("Le fichier existe. Le remplacer ?") <> 1 THEN EXIT_SUB
        END_IF
        FILE_SAVE 4,a$
    END_IF
    
    modif% = 0
        
END_SUB
' ----------------------------------------------------------------------
modifie:
    modif% = 1
RETURN
' ----------------------------------------------------------------------
SUB creerFenetrePrincipale()
    WIDTH 0,1200
    HEIGHT 0,750
    LEFT 0,(SCREEN_X - WIDTH(0))/2
    TOP 0,(SCREEN_Y - HEIGHT(0))/2
    COLOR 0,100,150,200
    ON_RESIZE 0,formatFenetre

    BUTTON 1
    LEFT 1,25
    TOP 1,25
    FONT_SIZE 1,10
    CAPTION 1,"Ouvrir"
    ON_CLICK 1,ouvrir

    BUTTON 2
    LEFT 2,125
    TOP 2,25
    FONT_SIZE 2,10
    CAPTION 2,"Enregistrer"
    ON_CLICK 2,enregistrer

    MEMO 3
    WIDTH 3,WIDTH_CLIENT(0)-50
    HEIGHT 3,(HEIGHT_CLIENT(0)-125)/2
    LEFT 3,25
    TOP 3,75
    BAR_BOTH 3
    COLOR 3,20,20,20
    FONT_COLOR 3,255,255,255
    FONT_NAME 3,"Calibri"
    FONT_SIZE 3,12

    MEMO 4
    WIDTH 4,WIDTH_CLIENT(0)-50
    HEIGHT 4,(HEIGHT_CLIENT(0)-125)/2
    LEFT 4,25
    TOP 4,HEIGHT(3)+100
    BAR_BOTH 4
    COLOR 4,20,20,20
    FONT_COLOR 4,255,255,255
    FONT_NAME 4,"Calibri"
    FONT_SIZE 4,12
    ON_CHANGE 4,modifie

    SYNEDIT 5
    WIDTH 5,WIDTH_CLIENT(0)-50
    HEIGHT 5,(HEIGHT_CLIENT(0)-125)/2
    LEFT 5,25
    TOP 5,HEIGHT(3)+100
    HIDE 5
    SYNEDIT_TARGET_IS_GUTTER
    COLOR 5,20,20,20
    FONT_COLOR 5,200,200,200
    FONT_NAME 5,"Consolas"
    FONT_SIZE 5,12
    SYNEDIT_TARGET_IS_KEYWORD
    FONT_COLOR 5,0,255,0
    SYNEDIT_TARGET_IS_COMMENT
    FONT_COLOR 5,80,80,200
    SYNEDIT_TARGET_IS_OBJECT    
    COLOR 5,20,20,20
    FONT_COLOR 5,220,220,220
    FONT_NAME 5,"Consolas"
    FONT_SIZE 5, 12
    ON_CHANGE 5,modifie
    
    ALPHA 6
    COLOR 6,100,150,200
    TOP 6,12
    FONT_SIZE 6,30
    LEFT 6,(WIDTH_CLIENT(0) - TEXT_WIDTH("UTF-8  to  ASCII/ANSI",6))/2
    FONT_COLOR 6,255,255,255
    CAPTION 6,"UTF-8  to  ASCII/ANSI"
    
    APPLICATION_TITLE "UTF-8 to ASCII/ANSI"
    CAPTION 0,"UTF-8 to ASCII/ANSI"
    ON_CLOSE 0,quitter
    
END_SUB
' ----------------------------------------------------------------------
formatFenetre:
    OFF_RESIZE 0
    WIDTH 3,WIDTH_CLIENT(0)-50
    HEIGHT 3,(HEIGHT_CLIENT(0)-125)/2
    WIDTH 4,WIDTH_CLIENT(0)-50
    HEIGHT 4,(HEIGHT_CLIENT(0)-125)/2
    TOP 4,HEIGHT(3)+100
    WIDTH 5,WIDTH_CLIENT(0)-50
    HEIGHT 5,(HEIGHT_CLIENT(0)-125)/2
    TOP 5,HEIGHT(3)+100
    LEFT 6,(WIDTH_CLIENT(0) - TEXT_WIDTH("UTF-8  to  ASCII/ANSI",6))/2

    ON_RESIZE 0,formatFenetre
RETURN
' ----------------------------------------------------------------------
SUB affichageAide()
    DIM_LOCAL texteAide$
    
    texteAide$ = "UTF-8 to ASCII/ANSI est un utilitaire qui vous permettra de convertir "
    texteAide$ = texteAide$ + "un fichier basic (.bas) ou texte (.txt) codé en UTF-8 en un nouveau fichier"+ CHR$(13)+CHR$(10)
    texteAide$ = texteAide$ + "compatible avec le langage de programmation Panoramic." + CHR$(13)+CHR$(10)+CHR$(13)+CHR$(10)
    texteAide$ = texteAide$ + "La table ASCII/ANSI ayant une capacité maximum de 255 caractères, "
    texteAide$ = texteAide$ + "seuls les principaux caractères français sont convertis parmi les milliers" + CHR$(13)+CHR$(10)
    texteAide$ = texteAide$ + "que peut contenir la norme UTF-8." + CHR$(13)+CHR$(10)+CHR$(13)+CHR$(10)
    texteAide$ = texteAide$ + "Utilisation : Cliquez sur le bouton 'Ouvrir' pour  charger un fichier qui "
    texteAide$ = texteAide$ + "s'affichera en brut dans la fenêtre du haut." + CHR$(13)+CHR$(10)
    texteAide$ = texteAide$ + "Après conversion, votre fichier s'affichera dans la fenêtre inférieure."+CHR$(13)+CHR$(10)
    texteAide$ = texteAide$ + "Avant de l'enregistrer, vous pouvez le modifier pour effectuer les dernières "
    texteAide$ = texteAide$ + "corrections nécessaires." + CHR$(13)+CHR$(10)+CHR$(13)+CHR$(10)
    texteAide$ = texteAide$ + "Programme réalisé en langage Panoramic par Marc."+CHR$(13)+CHR$(10)+CHR$(13)+CHR$(10)
    texteAide$ = texteAide$ + "http://panoramic.1fr1.net/"
    
    TEXT 3,texteAide$

END_SUB
' ----------------------------------------------------------------------
quitter:
    CLOSE_INACTIVE
    IF modif% = 1
        reponse% = MESSAGE_CONFIRMATION_YES_NO("Souhaitez-vous enregistrer le projet en cours avant de quitter ?")
        IF reponse% = 0
            RETURN
        END_IF
        IF reponse% = 1
             enregistrement()
             TERMINATE
        END_IF
    END_IF
    CLOSE_ACTIVE
RETURN

L'identificateur UTF-8 "BOM" si présent est supprimé. Quelques améliorations dans l'algorithme de conversion. La gestion du saut de page prend tous les cas de figure.

Juste pour l'anecdote, suivant les éditeurs, un simple "aller à la ligne" peut être codé de quatre manières différentes :
- sur un seul octet : un 0A en hexadécimal
- sur un seul octet : un 0D en hexadécimal
- sur deux octets : 0A 0D
- sur deux octets : 0D 0A

Peu importe le cas rencontré, le convertisseur renvoie systématiquement la séquence 0D 0A : norme DOS, compatible avec Panoramic.

Sans l'interface utilisateur, voici la fonction qui converti l'UTF-8 vers ANSI que j'ai appelée Utf8_To_Ansi$() dans mon programme.
Vous lui envoyez le texte initial via une variable en paramètre, elle vous retourne le texte ANSI.

Code:
fnc Utf8_To_Ansi$(utf8$)
    dim_local texteAnsi$, index%, bom$, longueurUTF8%, caracterecourant$, caracteresuivant$

    longueurUTF8% = len(utf8$)

    index% = 1

    ' suppression entete BOM (EF BB BF) s'il existe
    bom$ = chr$(239) + chr$(187) + chr$(191)
    if instr(utf8$,bom$) = 1
        index% = index% + 3
    end_if

    while index% <= longueurUTF8%

        caracterecourant$ = mid$(utf8$,index%,1)
        caracteresuivant$ = mid$(utf8$,index%+1,1)

    if asc(caracterecourant$) = 10 or asc(caracterecourant$) = 13  
        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 13
            texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
            index% = index% + 1
        else
            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                index% = index% + 1
            else
                if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                index% = index% + 1
                else
                    if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 13
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                        index% = index% + 1
                    else
                        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                        else
                            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                            end_if
                        end_if
                    end_if    
                end_if
            end_if
        end_if
    else
        if asc(caracterecourant$) < 128
            texteAnsi$ = texteAnsi$ + caracterecourant$
        else
            if asc(caracterecourant$) = 194
                index% = index% + 1
                caracterecourant$ = MID$(utf8$,index%,1)
                texteAnsi$ = texteAnsi$ + caracterecourant$
            else
                if asc(caracterecourant$) = 195
                    index% = index% + 1
                    caracterecourant$ = MID$(utf8$,index%,1)
                    texteAnsi$ = texteAnsi$ + CHR$(ASC(caracterecourant$) + 64)
                else
                    texteAnsi$ = texteAnsi$ + caracterecourant$
                end_if    
            end_if              
        end_if
    end_if
        index% = index% + 1
    end_while    
        
    result texteAnsi$

end_fnc


Bonne programmation à tous !
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 16 Oct 2020 - 17:52

Bonjour à tous !

Après avoir fait la conversion UTF-8 vers Windows-1252, appelé aussi CP-1252 et abusivement ANSI, je vous propose le retour : du CP-1252 vers UTF-8.

Sur nos ordinateurs, Panoramic utilise la table de caractères CP-1252. Cette table nous donne l’accès au caractère € : sur le clavier c’est la combinaison des touches "Alt Gr + e" qui correspond au code Ascii 128 (80 en Hexadécimal).

J’ai donc ajouté la prise en charge, lors du codage et du décodage, du symbole €.
Pour info, en UTF-8, la lettre € est codée sur trois octets : E2 82 AC en hexadécimal.

Voici la table de caractères utilisée par Panoramic (CP-1252). Les caractères sur fond blanc sont gérés par le convertisseur. Ceux sur fond bleu ne sont pas pris en charge. On pourrait les ajouter…

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Tablep10


Le nouvel utilitaire :
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Conver10


Code:
' Convertisseur CP-1252 <--> UTF-8
' Marc - 15 octobre 2020
' http://panoramic.1fr1.net/

dim texteOriginal$, texteTraduit$
dim langage%, sensTranscodage%, bom%
dim reponseUtilisateur%
dim messageUtilisateur$(7)

' langage% = 1 => francais
' langage% = 2 => anglais
' sensTranscodage% = 1 => CP-1252 vers UTF-8
' sensTranscodage% = 2 => UTF-8 vers CP-1252
' bom% = 1 => avec BOM
' bom% = 2 => sans BOM

label redimensionner, langue, francais, english, utf8_cp1252, cp1252_utf8, sensConversion, quitter
label ouvrir, convertir, nouveau, enregistrer
label avecBom, sansBom, choixBom

creerFenetrePrincipale()

set_focus 13

end
' ----------------------------------------------------------------------
convertir:
    
    set_focus 0
    
    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(1))
        if reponseUtilisateur% = 0 or reponseUtilisateur% = 2
            return
        end_if
    end_if

    conversion()
return
' ----------------------------------------------------------------------
sub conversion()
    text 15, chr$(13)+chr$(10) + "   " + messageUtilisateur$(2)

    if sensTranscodage% = 1
        texteOriginal$ = text$(13)
        texteTraduit$ = Ansi_to_Utf8$(texteOriginal$,bom%)
    else
        texteOriginal$ = text$(13)
        texteTraduit$ = Utf8_To_Ansi$(texteOriginal$)
    end_if

    clear 15

    text 15,texteTraduit$

    set_focus 0

end_sub
' ----------------------------------------------------------------------
fnc Utf8_To_Ansi$(utf8$)
    dim_local texteAnsi$, index%, bom$, longueurUTF8%, caracterecourant$, caracteresuivant$

    longueurUTF8% = len(utf8$)

    index% = 1

    ' suppression entete BOM (EF BB BF) s'il existe
    bom$ = chr$(239) + chr$(187) + chr$(191)
    if instr(utf8$,bom$) = 1
        index% = index% + 3
    end_if

    while index% <= longueurUTF8%

        caracterecourant$ = mid$(utf8$,index%,1)
        caracteresuivant$ = mid$(utf8$,index%+1,1)

    if asc(caracterecourant$) = 10 or asc(caracterecourant$) = 13  
        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 13
            texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
            index% = index% + 1
        else
            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                index% = index% + 1
            else
                if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                index% = index% + 1
                else
                    if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 13
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                        index% = index% + 1
                    else
                        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                        else
                            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                            end_if
                        end_if
                    end_if    
                end_if
            end_if
        end_if
    else
        if asc(caracterecourant$) < 128
            texteAnsi$ = texteAnsi$ + caracterecourant$
        else
            if asc(caractereCourant$) = 226 and asc(caracteresuivant$) = 130 and asc(mid$(utf8$,index%+2,1)) = 172
                texteAnsi$ = texteAnsi$ + chr$(128)
                index% = index% + 2
            else
                if asc(caracterecourant$) = 194
                    index% = index% + 1
                    caracterecourant$ = MID$(utf8$,index%,1)
                    texteAnsi$ = texteAnsi$ + caracterecourant$
                else
                    if asc(caracterecourant$) = 195
                        index% = index% + 1
                        caracterecourant$ = MID$(utf8$,index%,1)
                        texteAnsi$ = texteAnsi$ + chr$(ASC(caracterecourant$) + 64)
                    else
                        texteAnsi$ = texteAnsi$ + caracterecourant$
                    end_if
                end_if    
            end_if              
        end_if
    end_if
        index% = index% + 1
    end_while    
        
    result texteAnsi$

end_fnc
' ----------------------------------------------------------------------
fnc Ansi_to_Utf8$(texteAnsi$,BOM%)
    dim_local texteUtf8$, index%, bom$, longueurAnsi%, caracterecourant$, caracteresuivant$

    longueurAnsi% = len(texteAnsi$)

    index% = 1
    
    if BOM% = 1
        texteUtf8$ = chr$(239) + chr$(187) + chr$(191)
    end_if

    while index% <= longueurAnsi%

        caracterecourant$ = mid$(texteAnsi$,index%,1)
        
        if asc(caracterecourant$) < 128
            texteUtf8$ = texteUtf8$ + caracterecourant$
        else
            if asc(caracterecourant$) = 128 :' encodage caractere EURO
                texteUtf8$ = texteUtf8$ + chr$(226) + chr$(130) + chr$(172)      
            else
                if asc(caracterecourant$) < 192
                    texteUtf8$ = texteUtf8$ + chr$(194) + caracterecourant$
                else
                    texteUtf8$ = texteUtf8$ + chr$(195) + chr$(asc(caracterecourant$) - 64)
                end_if            
            end_if
        end_if
    
    index% = index% + 1

    end_while        

    result texteUtf8$

end_fnc
' ----------------------------------------------------------------------
ouvrir:
    SubOuvrirFichier()
return
' ----------------------------------------------------------------------
sub SubOuvrirFichier()
    dim_local fichier$

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(3))
        if reponseUtilisateur% = 0
            exit_sub
        end_if
        if reponseUtilisateur% = 1
             enregistrement()
             exit_sub
        end_if
    end_if

    CLEAR 13
    CLEAR 15

    if object_exists(30) = 0
        open_dialog 30
    end_if

'    FILTER 30,"Fichiers .bas .txt|*.txt;*.bas"
    fichier$ = FILE_name$(30)

    if fichier$ = "_"
        exit_sub
    end_if

    file_load 13,fichier$
END_sub
' ----------------------------------------------------------------------
nouveau:
    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))

        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    clear 13
    clear 15
    set_focus 13
return
' ----------------------------------------------------------------------
enregistrer:
    enregistrement()
return
' ----------------------------------------------------------------------
sub enregistrement()
    dim_local a$
    
    if object_exists(31) = 0
        save_dialog 31
    end_if

        if text$(15) = ""
            message messageUtilisateur$(5)
            exit_sub
        end_if
'        FILTER 31,
'        DIR_DIALOG 31,
'        FILE_DIALOG 31,
        a$ = FILE_name$(31)
        if a$ = "_" OR a$ = "" then exit_sub
        if FILE_EXISTS(a$) = 1
            if message_confirmation_yes_no(messageUtilisateur$(6)) <> 1 then exit_sub
        end_if

        file_save 15,a$
    
END_sub
' ----------------------------------------------------------------------
sub creerFenetrePrincipale()
    width 0,1200
    height 0,750
    left 0,(SCREEN_X - width(0))/2
    top 0,(SCREEN_Y - height(0))/2
    color 0,100,150,200
    on_resize 0,Redimensionner

    ' commutateur de gauche
    picture 1
    left 1,45
    top 1,20
    height 1,50
    width 1,20
    color 1,100,150,200
    2d_target_is 1
    2d_PEN_color 255,255,255
    2d_line 8,0,12,0
    2d_line 6,1,14,1
    2d_line 4,2,16,2
    2d_line 3,3,17,3
    2d_rectangle 2,4,18,6
    2d_rectangle 1,6,19,8
    2d_rectangle 0,8,20,42
    2d_rectangle 1,42,19,44
    2d_rectangle 2,44,18,46
    2d_line 3,46,17,46
    2d_line 4,47,16,47
    2d_line 6,48,14,48
    2d_line 8,49,12,49
    2d_pen_color 30,30,30
    2d_fill_color 30,30,30
    2d_circle 10,10,8
    cursor_point 1
    on_click 1,sensConversion

    alpha 2
    left 2,70
    top 2,22
    color 2,100,150,200
    font_color 2,0,0,0
    font_size 2,10
    caption 2,"CP-1252 -> UTF-8"
    cursor_point 2
    on_click 2,cp1252_utf8
    
    alpha 3
    left 3,70
    top 3,52
    color 3,100,150,200
    font_color 3,0,0,0
    font_size 3,10
    caption 3,"UTF-8 -> CP-1252"
    cursor_point 3
    on_click 3,utf8_cp1252

    ' contacteur de droite Fr/En
    picture 4
    top 4,20
    height 4,50
    width 4,20
    color 4,100,150,200
    2d_target_is 4
    2d_PEN_color 255,255,255
    2d_line 8,0,12,0
    2d_line 6,1,14,1
    2d_line 4,2,16,2
    2d_line 3,3,17,3
    2d_rectangle 2,4,18,6
    2d_rectangle 1,6,19,8
    2d_rectangle 0,8,20,42
    2d_rectangle 1,42,19,44
    2d_rectangle 2,44,18,46
    2d_line 3,46,17,46
    2d_line 4,47,16,47
    2d_line 6,48,14,48
    2d_line 8,49,12,49
    2d_pen_color 30,30,30
    2d_fill_color 30,30,30
    2d_circle 10,10,8
    cursor_point 4
    on_click 4, langue

    alpha 5
    top 5,22
    color 5,100,150,200
    font_color 5,0,0,0
    font_size 5,10
    caption 5,"En"
    cursor_point 5
    on_click 5,english
    
    alpha 6
    top 6,52
    color 6,100,150,200
    font_color 6,0,0,0
    font_size 6,10
    caption 6,"Fr"
    cursor_point 6
    on_click 6,francais

    ' commutateur BOM
    picture 7
    top 7,20
    height 7,50
    width 7,20
    color 7,100,150,200
    2d_target_is 7
    2d_PEN_color 255,255,255
    2d_line 8,0,12,0
    2d_line 6,1,14,1
    2d_line 4,2,16,2
    2d_line 3,3,17,3
    2d_rectangle 2,4,18,6
    2d_rectangle 1,6,19,8
    2d_rectangle 0,8,20,42
    2d_rectangle 1,42,19,44
    2d_rectangle 2,44,18,46
    2d_line 3,46,17,46
    2d_line 4,47,16,47
    2d_line 6,48,14,48
    2d_line 8,49,12,49
    2d_pen_color 30,30,30
    2d_fill_color 30,30,30
    2d_circle 10,10,8
    cursor_point 7
    on_click 7,choixBom

    alpha 8
    top 8,22
    color 8,100,150,200
    font_color 8,0,0,0
    font_size 8,10
    cursor_point 8
    on_click 8,sansBom
    
    alpha 9
    top 9,52
    color 9,100,150,200
    font_color 9,0,0,0
    font_size 9,10
    cursor_point 9
    on_click 9, avecBom

    ' légende memo du haut
    alpha 11
    color 11,100,150,200
    top 11,80
    font_size 11,12
    left 11,30
    font_color 11,255,255,255

    ' memo du haut
    memo 13
    left 13,25
    top 13,105
    bar_both 13
    color 13,20,20,20
    font_color 13,255,255,255
    font_name 13,"Calibri"
    font_size 13,12

    ' legende memo du bas
    alpha 14
    color 14,100,150,200
    font_size 14,12
    left 14,30
    font_color 14,255,255,255
 
    memo 15
    left 15,25
    bar_both 15
    color 15,20,20,20
    font_color 15,255,255,255
    font_name 15,"Calibri"
    font_size 15,12

    
    button 16
    left 16,50
    font_size 16,10
    cursor_point 16
    on_click 16,ouvrir

    button 17
    left 17,125
    font_size 17,10
    cursor_point 17
    on_click 17,nouveau
 
    button 18
    left 18,200
    font_size 18,10
    cursor_point 18
    on_click 18,convertir

    button 19
    left 19,275
    font_size 19,10
    cursor_point 19
    on_click 19,enregistrer

    alpha 20
    font_color 20,255,255,255
    font_size 20,10
    caption 20,"Marc - http://panoramic.1fr1.net"
    
    ' titre 1/2
    alpha 21
    color 21,100,150,200
    font_color 21,255,255,255

    ' titre 2/2
    alpha 22
    color 22,100,150,200
    font_color 22,255,255,255

    on_close 0,quitter

    sensTranscodage% = 1 :' CP-1252 vers UTF8 par defaut

    langage% = 1 :' Francais par defaut

    subLangue()

    actualiserAffichage()
  
END_sub
' ----------------------------------------------------------------------
avecBom:
    bom% = 1
    actualiserAffichage()
    
    if text$(15) <> ""
        conversion()
    end_if
    
return
' ----------------------------------------------------------------------
sansBom:
    bom% = 2
    actualiserAffichage()
    
    if text$(15) <> ""
        conversion()
    end_if

return
' ----------------------------------------------------------------------
choixBom:
    if bom% = 1
        bom% = 2
    else
        bom% = 1
    end_if
    actualiserAffichage()
    
    if text$(15) <> ""
        conversion()
    end_if
          
return
' ----------------------------------------------------------------------
utf8_cp1252:

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))
        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    text 15,""

    set_focus 0

    sensTranscodage% = 2
    actualiserAffichage()
return
' ----------------------------------------------------------------------
cp1252_utf8:

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))
        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    text 15,""

    set_focus 0

    sensTranscodage% = 1
    actualiserAffichage()
return
' ----------------------------------------------------------------------
sensConversion:

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))
        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    text 15,""

    set_focus 0

    if sensTranscodage% = 1
        sensTranscodage% = 2
    else    
        sensTranscodage% = 1
    end_if
    actualiserAffichage()    
return
' ----------------------------------------------------------------------
francais:
    langage% = 1
    subLangue()
return
' ----------------------------------------------------------------------
english:
    langage% = 2
    subLangue()
return
' ----------------------------------------------------------------------
langue:

    if langage% = 1
        langage% = 2
        subLangue()
    else
        langage% = 1
        subLangue()
    end_if
        
return
' ----------------------------------------------------------------------
sub subLangue()

    if langage% = 1 :' francais
        caption 9,"Avec BOM"
        caption 8,"Sans BOM"
        caption 11,"Texte original :"
        caption 14,"Aperçu texte converti :"
        caption 16,"Ouvrir"
        caption 17,"Nouveau"
        caption 18,"Convertir"
        caption 19,"Enregistrer"
        
        application_title "Convertisseur CP1252 <-> UTF-8"
        caption 0,"Convertisseur CP1252 <-> UTF-8"
        
        2d_target_is 4
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,40,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,10,8

        messageUtilisateur$(1) = "Souhaitez-vous recommencer la conversion du fichier ?"
        messageUtilisateur$(2) = "Patientez SVP, traitement en cours..."
        messageUtilisateur$(3) = "Souhaitez-vous enregistrer le projet en cours avant d'en ouvrir un nouveau ?"
        messageUtilisateur$(4) = "Souhaitez-vous enregistrer le projet en cours ?"
        messageUtilisateur$(5) = "Enregistrement impossible : Votre projet est vide !"
        messageUtilisateur$(6) = "Le fichier existe. Le remplacer ?"
        messageUtilisateur$(7) = "Souhaitez-vous enregistrer le projet en cours avant de quitter ?"

    else
        caption 9,"With BOM"
        caption 8,"Without BOM"
        caption 11,"Original text:"
        caption 14,"Preview converted text:"
        caption 16,"Load"
        caption 17,"New"
        caption 18,"Convert"
        caption 19,"Save"

        APPLICATION_TITLE "CP1252 <-> UTF-8 Converter"
        caption 0,"CP1252 <-> UTF-8 Converter"

        2d_target_is 4
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,10,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,40,8

        messageUtilisateur$(1) = "Do you want to start converting the file again?"
        messageUtilisateur$(2) = "Please wait, processing in progress ..."
        messageUtilisateur$(3) = "Do you want to save the current project before opening a new one?"
        messageUtilisateur$(4) = "Do you want to save the current project?"
        messageUtilisateur$(5) = "Cannot save: Your project is empty!"
        messageUtilisateur$(6) = "The file exists. Replace it ?"
        messageUtilisateur$(7) = "Would you like to save the current project before exiting?"

    end_if

    actualiserAffichage()

end_sub
' ----------------------------------------------------------------------
Redimensionner:
    actualiserAffichage()
return
' ----------------------------------------------------------------------
sub actualiserAffichage()
    dim_local titre1$, titre2$
    
    off_resize 0

    if sensTranscodage% = 1

        show 7
        show 8
        show 9

        2d_target_is 1
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,10,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,40,8

        if langage% = 1
            titre1$ = "Convertisseur"
            titre2$ = "CP-1252 vers UTF-8"
            left 8,width_client(0) - 188
        else
            titre1$ = "CP-1252 to UTF-8"
            titre2$ = "Converter"
           left 8,width_client(0) - 206
        end_if

    else

        hide 7
        hide 8
        hide 9

        2d_target_is 1
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,40,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,10,8

        if langage% = 1
            titre1$ = "Convertisseur"
            titre2$ = "UTF-8 vers CP-1252"
        else
            titre1$ = "UTF-8 to CP-1252"
            titre2$ = "Converter"
        end_if    

    end_if
    
    if bom% = 1
        2d_target_is 7
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,40,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,10,8
    else
        2d_target_is 7
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,10,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,40,8
    end_if
    
    if width(0) < 680
        width 0,680
    end_if

    if height(0) < 400
        height 0,400
    end_if
    
    if width_client(0) < 1080
        font_size 21,20
        top 21,16
        left 21,(width_client(0) - text_width(titre1$,21))/2
        caption 21,titre1$
        
        show 22
        font_size 22,20
        top 22,55
        left 22,(width_client(0) - text_width(titre2$,22))/2
        caption 22,titre2$
    else
        hide 22
        font_size 21,30
        top 21,24
        left 21,(width_client(0) - text_width(titre1$ + " " + titre2$,21))/2
        caption 21,titre1$ + " " + titre2$
    end_if

    width 13,width_client(0)-50
    width 15,width_client(0)-50

    left 20,width_client(0) - text_width("Marc - http://panoramic.1fr1.net",20) - 10
    top 20,height_client(0)-20

    left 4,width_client(0) - 65
    left 5,width_client(0) - 83
    left 6,width_client(0) - 83
    left 7,width_client(0) - 125
    left 9,width_client(0) - 188

    top 16,height_client(0)-50
    top 17,height_client(0)-50
    top 18,height_client(0)-50
    top 19,height_client(0)-50


    height 13,(height_client(0)-225)/2
    height 15,(height_client(0)-225)/2
    top 15,height(13)+150

    top 14,105 + height(13) + 20


    on_resize 0,Redimensionner
end_sub
' ----------------------------------------------------------------------
quitter:
    CLOSE_INACTIVE
    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(7))
        if reponseUtilisateur% = 0
            return
        end_if
        if reponseUtilisateur% = 1
            enregistrement()
            terminate
        end_if
    end_if
    CLOSE_ACTIVE
return

Prise en main :

Vous choisissez le sens de conversion avec le commutateur en haut à gauche.
Vers l’UTF-8 pour pouvez sélectionner avec ou sans l’entête BOM.
Pour tout savoir sur BOM, c'est ici :https://fr.wikipedia.org/wiki/Indicateur_d'ordre_des_octets

Dans la fenêtre supérieure, vous pouvez charger un fichier via le bouton "Ouvrir", ou taper directement votre texte au clavier.
Après avoir cliqué sur "Convertir", le texte converti s’affichera dans la fenêtre du bas. Un bouton "Enregistrer" vous permet de sauvegarder la conversion.

Les conversions UTF-8 vers CP-1252 et inversement sont gérées par deux fonctions utilisables dans n’importe quel source.

De l’UTF-8 vers CP-1252, vous envoyez votre texte (sous forme d’un variable xxx$ ) à convertir comme paramètre à la fonction ci- dessous. Elle vous retournera votre texte converti en CP-1252.

Code:
fnc Utf8_To_Ansi$(utf8$)
    dim_local texteAnsi$, index%, bom$, longueurUTF8%, caracterecourant$, caracteresuivant$

    longueurUTF8% = len(utf8$)

    index% = 1

    ' suppression entete BOM (EF BB BF) s'il existe
    bom$ = chr$(239) + chr$(187) + chr$(191)
    if instr(utf8$,bom$) = 1
        index% = index% + 3
    end_if

    while index% <= longueurUTF8%

        caracterecourant$ = mid$(utf8$,index%,1)
        caracteresuivant$ = mid$(utf8$,index%+1,1)

    if asc(caracterecourant$) = 10 or asc(caracterecourant$) = 13  
        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 13
            texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
            index% = index% + 1
        else
            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                index% = index% + 1
            else
                if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                index% = index% + 1
                else
                    if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 13
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                        index% = index% + 1
                    else
                        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                        else
                            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                            end_if
                        end_if
                    end_if    
                end_if
            end_if
        end_if
    else
        if asc(caracterecourant$) < 128
            texteAnsi$ = texteAnsi$ + caracterecourant$
        else
            if asc(caractereCourant$) = 226 and asc(caracteresuivant$) = 130 and asc(mid$(utf8$,index%+2,1)) = 172
                texteAnsi$ = texteAnsi$ + chr$(128)
                index% = index% + 2
            else
                if asc(caracterecourant$) = 194
                    index% = index% + 1
                    caracterecourant$ = MID$(utf8$,index%,1)
                    texteAnsi$ = texteAnsi$ + caracterecourant$
                else
                    if asc(caracterecourant$) = 195
                        index% = index% + 1
                        caracterecourant$ = MID$(utf8$,index%,1)
                        texteAnsi$ = texteAnsi$ + chr$(ASC(caracterecourant$) + 64)
                    else
                        texteAnsi$ = texteAnsi$ + caracterecourant$
                    end_if
                end_if    
            end_if              
        end_if
    end_if
        index% = index% + 1
    end_while    
        
    result texteAnsi$

end_fnc


Du CP-1252 vers UTF-8, il y a deux paramètres à envoyer. Le premier est votre texte (toujours sous forme d’une variable xxx$) et le deuxième est un simple nombre entier (variable x%) qui aura pour valeur :
1 => avec entête BOM.
Toutes les autres valeurs => sans entête BOM.[/b]
Code:
fnc Ansi_to_Utf8$(texteAnsi$,BOM%)
    dim_local texteUtf8$, index%, bom$, longueurAnsi%, caracterecourant$, caracteresuivant$

    longueurAnsi% = len(texteAnsi$)

    index% = 1
    
    if BOM% = 1
        texteUtf8$ = chr$(239) + chr$(187) + chr$(191)
    end_if

    while index% <= longueurAnsi%

        caracterecourant$ = mid$(texteAnsi$,index%,1)
        
        if asc(caracterecourant$) < 128
            texteUtf8$ = texteUtf8$ + caracterecourant$
        else
            if asc(caracterecourant$) = 128 :' encodage caractere EURO
                texteUtf8$ = texteUtf8$ + chr$(226) + chr$(130) + chr$(172)      
            else
                if asc(caracterecourant$) < 192
                    texteUtf8$ = texteUtf8$ + chr$(194) + caracterecourant$
                else
                    texteUtf8$ = texteUtf8$ + chr$(195) + chr$(asc(caracterecourant$) - 64)
                end_if            
            end_if
        end_if
    
    index% = index% + 1

    end_while        

    result texteUtf8$

end_fnc



Bonne programmation à tous !


Dernière édition par Marc le Sam 17 Oct 2020 - 10:09, édité 1 fois
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 16 Oct 2020 - 19:04

Merci Marc pour le partage.
Tu as écris que le code ASCII du caractère est 128.
Désolé, mais 128 correspond à Ç.
Le code de l’Euro est 0128.
Taper sur le clavier
<ALT> + 128  ça donne Ç  
<ALT> + 0128 ça donne €

J’ai testé ton programme : c’est presque parfaitement parfait.
Je dis presque parfait parce que j'ai poussé le bouchon un peu trop en lui fournissant
un texte très long (887 Ko tout de même !), le programme reste dans
"Patientez SVP, traitement en cours… " sans rien d’autre chose à faire.

Spoiler:

Tu envoies en paramètre pour la FNC de conversion une chaine de caractères contenant le texte à convertir.
Je soupçonne la capacité limitée de cette variable chaine qui ne peut dépasser une certaine limite.
Si c’est vrai, c’est à Jack de trancher :
pour une variable chaine quel est le nombre maximal de caractères qu’elle puisse contenir ?

Bonne continuation !
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 16 Oct 2020 - 20:08

Merci Paydall !

Papydall a écrit:
Tu as écris que le code ASCII du caractère € est 128.
Désolé, mais 128 correspond à Ç.
Le code de l’Euro est 0128.

Pardon ! je rectifie :
Dans la table CP-1252 utilisée par Panoramic, 128 correspond au caractère €.

Sous Panoramic, print chr$(128) donne le symbole €.

Par extension et simplification, dans Panoramic on parle de "caractère ASCII" pour toute l'étendue 00 à FF,
alors que seule la partie 00 à 7F correspond à la table ASCII pure.

La partie étendue 80 à FF du CP-1252 n'a rien à voir avec les extensions historiques ASCII (CP-437 / CP-850) qui était composées entres autres de caractères semi-graphiques.
Suivant les pays, plusieurs variantes existaient pour cette partie étendue.


Papydall a écrit:
un texte très long (887 Ko tout de même !)
affraid Merci d'avoir testé !

Du coup j'ai essayé un fichier de 142 ko, ça fonctionne, mais je me suis aperçu que j'ai oublié d'inhiber les ON_CLICK durant le traitement....
Risque de plantage assuré ! Je vais donc ajouter ce qu'il faut.

Papydall a écrit:
Je soupçonne la capacité limitée de cette variable chaine qui ne peut dépasser une certaine limite.
Si c’est vrai, c’est à Jack de trancher :
pour une variable chaine quel est le nombre maximal de caractères qu’elle puisse contenir ?

... affaire à suivre !

Encore merci Papydall, pour ton retour d'expérience avec le convertisseur.


EDIT :

@Papydall
Je viens d'essayer de convertir un fichier texte de 931631 octets du format CP-1252 vers UTF-8, tout s'est bien déroulé en 4mn 33s.
Le fichier de sortie, en UTF-8, est plus lourd du fait que certains caractères sont codés sur plusieurs octets, et fait maintenant 962703 octets.

Ce n'est donc pas le poids de ton fichier au niveau de la fonction qui a bloqué la conversion...
scratch Un caractère qui ne passe pas dans la conversion ?

J'aimerais bien approfondir la question. Aurais-tu un lien où je puisse télécharger ton livre de Jules Verne ?
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 16 Oct 2020 - 22:37

J’ai mis pour toi, sur mon webdav Jules_Verne.zip
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 16 Oct 2020 - 22:58

Je viens de refaire le test.
Ça fonctionne avec mon long fichier.
Il a pris tout de même une bonne dizaine de minutes.
Conclusion : le poids du fichier n’a pas d’incident sauf le temps un peu long.
Une fois encore, merci.

Rem : la 1ère fois je n'étais pas assez patient.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyVen 16 Oct 2020 - 23:12

Un grand merci Papydall !

Tu peux supprimer le fichier de ton WebDav.

J'ai fait l'essai... et tout fonctionne bien chez moi. scratch

3mn 43s pour la conversion en UTF-8.
volume de départ : 899 040 octets
volume une fois converti : 922 578 octets

Vue sur le début de la table des matières : on voit bien les caractères accentués qui ont été convertis en UTF-8 :
Spoiler:

Je ne pas pourquoi la conversion n'a pas fonctionné sur ton ordinateur.

EDIT :
J'ai mis dans mon WebDav le fichier converti en UTF-8 sous le nom de Jules_Verneutf8.txt.

2ème EDIT :
@Papydall

Mince, je n'avais pas vu ton dernier message !
Merci d'avoir refait le test, ça me rassure.
Je vais essayer avec le compilateur voir le gain en rapidité.
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptySam 17 Oct 2020 - 9:22

Très bon travail Marc. Merci pour le partage !

Juste une petite correction... Wink

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Captur21
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptySam 17 Oct 2020 - 9:45

Bonjour à tous !

Minibug a écrit:
Juste une petite correction...

Aie ! Merci Laurent ! C'est rectifié pour la prochaine version qui indiquera en plus le poids des fichiers avant et après conversion.

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Lauren14
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 EmptyMer 21 Oct 2020 - 23:24

Bonsoir à tous !

Voici la mise à jour du convertisseur UTF-8  <->  CP-1252 qui comporte :
- Le blocage des commandes pendant le processus de conversion ;
- La rectification d’une faute d’orthographe (Merci à Minibug);
- L'ajout de l’information de la taille du fichier original et converti.


Code:
' Convertisseur CP-1252 <--> UTF-8
' Marc - 15 octobre 2020
' http://panoramic.1fr1.net/

dim texteOriginal$, texteTraduit$
dim langage%, sensTranscodage%, bom%
dim reponseUtilisateur%
dim messageUtilisateur$(7)

' langage% = 1 => francais
' langage% = 2 => anglais
' sensTranscodage% = 1 => CP-1252 vers UTF-8
' sensTranscodage% = 2 => UTF-8 vers CP-1252
' bom% = 1 => avec BOM
' bom% = 2 => sans BOM

label redimensionner, langue, francais, english, utf8_cp1252, cp1252_utf8, sensConversion, quitter
label ouvrir, convertir, nouveau, enregistrer
label avecBom, sansBom, choixBom
label legendeTextesSansPoids

creerFenetrePrincipale()

set_focus 0

end
' ----------------------------------------------------------------------
convertir:
    
    set_focus 0
    
    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(1))
        if reponseUtilisateur% = 0 or reponseUtilisateur% = 2
            return
        end_if
    end_if

    conversion()
    
return
' ----------------------------------------------------------------------
sub conversion()

    text 15, chr$(13)+chr$(10) + "   " + messageUtilisateur$(2)

    inactive 0
    
    if sensTranscodage% = 1
        texteOriginal$ = text$(13)
        texteTraduit$ = Ansi_to_Utf8$(texteOriginal$,bom%)
    else
        texteOriginal$ = text$(13)
        texteTraduit$ = Utf8_To_Ansi$(texteOriginal$)
    end_if

    clear 15

    text 15,texteTraduit$

    legendeTextesAvecPoids()

    active 0

    set_focus 0

end_sub
' ----------------------------------------------------------------------
fnc Format$(nombre$,separateur$)
   dim_local p
   p=len(nombre$)+1
   while p>4
      p=p-3
      nombre$=insert$(nombre$,separateur$,p)
   end_while
   result nombre$
end_fnc
' ----------------------------------------------------------------------
fnc Utf8_To_Ansi$(utf8$)
    dim_local texteAnsi$, index%, bom$, longueurUTF8%, caracterecourant$, caracteresuivant$

    longueurUTF8% = len(utf8$)

    index% = 1

    ' suppression entete BOM (EF BB BF) s'il existe
    bom$ = chr$(239) + chr$(187) + chr$(191)
    if instr(utf8$,bom$) = 1
        index% = index% + 3
    end_if

    while index% <= longueurUTF8%

        caracterecourant$ = mid$(utf8$,index%,1)
        caracteresuivant$ = mid$(utf8$,index%+1,1)

    if asc(caracterecourant$) = 10 or asc(caracterecourant$) = 13  
        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 13
            texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
            index% = index% + 1
        else
            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                index% = index% + 1
            else
                if asc(caracterecourant$) = 10 and asc(caracteresuivant$) = 10
                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                index% = index% + 1
                else
                    if asc(caracterecourant$) = 13 and asc(caracteresuivant$) = 13
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10) + chr$(13) + chr$(10)
                        index% = index% + 1
                    else
                        if asc(caracterecourant$) = 10 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                        texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                        else
                            if asc(caracterecourant$) = 13 and asc(caracteresuivant$) <> 13 and asc(caracteresuivant$) <> 10
                                texteAnsi$ = texteAnsi$ + chr$(13) + chr$(10)
                            end_if
                        end_if
                    end_if    
                end_if
            end_if
        end_if
    else
        if asc(caracterecourant$) < 128
            texteAnsi$ = texteAnsi$ + caracterecourant$
        else
            if asc(caractereCourant$) = 226 and asc(caracteresuivant$) = 130 and asc(mid$(utf8$,index%+2,1)) = 172
                texteAnsi$ = texteAnsi$ + chr$(128)
                index% = index% + 2
            else
                if asc(caracterecourant$) = 194
                    index% = index% + 1
                    caracterecourant$ = MID$(utf8$,index%,1)
                    texteAnsi$ = texteAnsi$ + caracterecourant$
                else
                    if asc(caracterecourant$) = 195
                        index% = index% + 1
                        caracterecourant$ = MID$(utf8$,index%,1)
                        texteAnsi$ = texteAnsi$ + chr$(ASC(caracterecourant$) + 64)
                    else
                        texteAnsi$ = texteAnsi$ + caracterecourant$
                    end_if
                end_if    
            end_if              
        end_if
    end_if
        index% = index% + 1
    end_while    
        
    result texteAnsi$

end_fnc
' ----------------------------------------------------------------------
fnc Ansi_to_Utf8$(texteAnsi$,BOM%)
    dim_local texteUtf8$, index%, bom$, longueurAnsi%, caracterecourant$, caracteresuivant$

    longueurAnsi% = len(texteAnsi$)

    index% = 1
    
    if BOM% = 1
        texteUtf8$ = chr$(239) + chr$(187) + chr$(191)
    end_if

    while index% <= longueurAnsi%

        caracterecourant$ = mid$(texteAnsi$,index%,1)
        
        if asc(caracterecourant$) < 128
            texteUtf8$ = texteUtf8$ + caracterecourant$
        else
            if asc(caracterecourant$) = 128 :' encodage caractere EURO
                texteUtf8$ = texteUtf8$ + chr$(226) + chr$(130) + chr$(172)      
            else
                if asc(caracterecourant$) < 192
                    texteUtf8$ = texteUtf8$ + chr$(194) + caracterecourant$
                else
                    texteUtf8$ = texteUtf8$ + chr$(195) + chr$(asc(caracterecourant$) - 64)
                end_if            
            end_if
        end_if
    
    index% = index% + 1

    end_while        

    result texteUtf8$

end_fnc
' ----------------------------------------------------------------------
ouvrir:
    SubOuvrirFichier()
return
' ----------------------------------------------------------------------
sub SubOuvrirFichier()
    dim_local fichier$

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(3))
        if reponseUtilisateur% = 0
            exit_sub
        end_if
        if reponseUtilisateur% = 1
             enregistrement()
             exit_sub
        end_if
    end_if

    CLEAR 13
    CLEAR 15

    legendeTextesAvecPoids()

    if object_exists(30) = 0
        open_dialog 30
    end_if

'    DIR_DIALOG 30,
'    FILTER 30,"Fichiers .bas .txt|*.txt;*.bas"
    fichier$ = FILE_name$(30)

    if fichier$ = "_"
        exit_sub
    end_if

    file_load 13,fichier$
END_sub
' ----------------------------------------------------------------------
nouveau:
    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))

        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    clear 13
    clear 15

    legendeTextesAvecPoids()

    set_focus 0
return
' ----------------------------------------------------------------------
enregistrer:
    enregistrement()
return
' ----------------------------------------------------------------------
sub enregistrement()
    dim_local a$
    
    if object_exists(31) = 0
        save_dialog 31
    end_if

        if text$(15) = ""
            message messageUtilisateur$(5)
            exit_sub
        end_if
'        FILTER 31,
'        DIR_DIALOG 31,
'        FILE_DIALOG 31,
        a$ = FILE_name$(31)
        if a$ = "_" OR a$ = "" then exit_sub
        if FILE_EXISTS(a$) = 1
            if message_confirmation_yes_no(messageUtilisateur$(6)) <> 1 then exit_sub
        end_if

        file_save 15,a$
    
END_sub
' ----------------------------------------------------------------------
sub creerFenetrePrincipale()
    width 0,1200
    height 0,750
    left 0,(SCREEN_X - width(0))/2
    top 0,(SCREEN_Y - height(0))/2
    color 0,100,150,200
    on_resize 0,Redimensionner

    ' commutateur de gauche
    picture 1
    left 1,45
    top 1,20
    height 1,50
    width 1,20
    color 1,100,150,200
    2d_target_is 1
    2d_PEN_color 255,255,255
    2d_line 8,0,12,0
    2d_line 6,1,14,1
    2d_line 4,2,16,2
    2d_line 3,3,17,3
    2d_rectangle 2,4,18,6
    2d_rectangle 1,6,19,8
    2d_rectangle 0,8,20,42
    2d_rectangle 1,42,19,44
    2d_rectangle 2,44,18,46
    2d_line 3,46,17,46
    2d_line 4,47,16,47
    2d_line 6,48,14,48
    2d_line 8,49,12,49
    2d_pen_color 30,30,30
    2d_fill_color 30,30,30
    2d_circle 10,10,8
    cursor_point 1
    on_click 1,sensConversion

    alpha 2
    left 2,70
    top 2,22
    color 2,100,150,200
    font_color 2,0,0,0
    font_size 2,10
    caption 2,"CP-1252 -> UTF-8"
    cursor_point 2
    on_click 2,cp1252_utf8
    
    alpha 3
    left 3,70
    top 3,52
    color 3,100,150,200
    font_color 3,0,0,0
    font_size 3,10
    caption 3,"UTF-8 -> CP-1252"
    cursor_point 3
    on_click 3,utf8_cp1252

    ' contacteur de droite Fr/En
    picture 4
    top 4,20
    height 4,50
    width 4,20
    color 4,100,150,200
    2d_target_is 4
    2d_PEN_color 255,255,255
    2d_line 8,0,12,0
    2d_line 6,1,14,1
    2d_line 4,2,16,2
    2d_line 3,3,17,3
    2d_rectangle 2,4,18,6
    2d_rectangle 1,6,19,8
    2d_rectangle 0,8,20,42
    2d_rectangle 1,42,19,44
    2d_rectangle 2,44,18,46
    2d_line 3,46,17,46
    2d_line 4,47,16,47
    2d_line 6,48,14,48
    2d_line 8,49,12,49
    2d_pen_color 30,30,30
    2d_fill_color 30,30,30
    2d_circle 10,10,8
    cursor_point 4
    on_click 4, langue

    alpha 5
    top 5,22
    color 5,100,150,200
    font_color 5,0,0,0
    font_size 5,10
    caption 5,"En"
    cursor_point 5
    on_click 5,english
    
    alpha 6
    top 6,52
    color 6,100,150,200
    font_color 6,0,0,0
    font_size 6,10
    caption 6,"Fr"
    cursor_point 6
    on_click 6,francais

    ' commutateur BOM
    picture 7
    top 7,20
    height 7,50
    width 7,20
    color 7,100,150,200
    2d_target_is 7
    2d_PEN_color 255,255,255
    2d_line 8,0,12,0
    2d_line 6,1,14,1
    2d_line 4,2,16,2
    2d_line 3,3,17,3
    2d_rectangle 2,4,18,6
    2d_rectangle 1,6,19,8
    2d_rectangle 0,8,20,42
    2d_rectangle 1,42,19,44
    2d_rectangle 2,44,18,46
    2d_line 3,46,17,46
    2d_line 4,47,16,47
    2d_line 6,48,14,48
    2d_line 8,49,12,49
    2d_pen_color 30,30,30
    2d_fill_color 30,30,30
    2d_circle 10,10,8
    cursor_point 7
    on_click 7,choixBom

    alpha 8
    top 8,22
    color 8,100,150,200
    font_color 8,0,0,0
    font_size 8,10
    cursor_point 8
    on_click 8,sansBom
    
    alpha 9
    top 9,52
    color 9,100,150,200
    font_color 9,0,0,0
    font_size 9,10
    cursor_point 9
    on_click 9, avecBom

    ' légende memo du haut
    alpha 11
    color 11,100,150,200
    top 11,80
    font_size 11,12
    left 11,30
    font_color 11,255,255,255

    ' memo du haut texte original
    memo 13
    left 13,25
    top 13,105
    bar_both 13
    color 13,20,20,20
    font_color 13,255,255,255
    font_name 13,"Calibri"
    font_size 13,12
    on_change 13,legendeTextesSansPoids

    ' legende memo du bas
    alpha 14
    color 14,100,150,200
    font_size 14,12
    left 14,30
    font_color 14,255,255,255
 
    ' memo du bas texte traduit
    memo 15
    left 15,25
    bar_both 15
    color 15,20,20,20
    font_color 15,255,255,255
    font_name 15,"Calibri"
    font_size 15,12
    on_change 15,legendeTextesSansPoids

    ' bouton Ouvrir
    button 16
    left 16,50
    font_size 16,10
    cursor_point 16
    on_click 16,ouvrir

    ' bouton Nouveau
    button 17
    left 17,125
    font_size 17,10
    cursor_point 17
    on_click 17,nouveau
 
    ' bouton Convertir
    button 18
    left 18,200
    font_size 18,10
    cursor_point 18
    on_click 18,convertir

    ' bouton Enregistrer
    button 19
    left 19,275
    font_size 19,10
    cursor_point 19
    on_click 19,enregistrer

    alpha 20
    font_color 20,255,255,255
    font_size 20,10
    caption 20,"Marc - http://panoramic.1fr1.net"
    
    ' titre 1/2
    alpha 21
    color 21,100,150,200
    font_color 21,255,255,255

    ' titre 2/2
    alpha 22
    color 22,100,150,200
    font_color 22,255,255,255

    on_close 0,quitter

    sensTranscodage% = 1 :' CP-1252 vers UTF8 par defaut

    langage% = 1 :' Francais par defaut

    subLangue()

    actualiserAffichage()
  
END_sub
' ----------------------------------------------------------------------
avecBom:
    bom% = 1
    actualiserAffichage()
    
    if text$(15) <> ""
        conversion()
    end_if
    
return
' ----------------------------------------------------------------------
sansBom:
    bom% = 2
    actualiserAffichage()
    
    if text$(15) <> ""
        conversion()
    end_if

return
' ----------------------------------------------------------------------
choixBom:
    if bom% = 1
        bom% = 2
    else
        bom% = 1
    end_if
    actualiserAffichage()
    
    if text$(15) <> ""
        conversion()
    end_if
          
return
' ----------------------------------------------------------------------
utf8_cp1252:

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))
        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    text 15,""

    set_focus 0

    sensTranscodage% = 2
    actualiserAffichage()
return
' ----------------------------------------------------------------------
cp1252_utf8:

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))
        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    text 15,""

    set_focus 0

    sensTranscodage% = 1
    actualiserAffichage()
return
' ----------------------------------------------------------------------
sensConversion:

    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(4))
        if reponseUtilisateur% = 0
            return
        end_if

        if reponseUtilisateur% = 1
             enregistrement()
        end_if
    end_if

    text 15,""

    set_focus 0

    if sensTranscodage% = 1
        sensTranscodage% = 2
    else    
        sensTranscodage% = 1
    end_if
    actualiserAffichage()    
return
' ----------------------------------------------------------------------
francais:
    langage% = 1
    subLangue()
return
' ----------------------------------------------------------------------
english:
    langage% = 2
    subLangue()
return
' ----------------------------------------------------------------------
langue:

    if langage% = 1
        langage% = 2
        subLangue()
    else
        langage% = 1
        subLangue()
    end_if
        
return
' ----------------------------------------------------------------------
sub subLangue()
    
    if langage% = 1 :' francais
        caption 9,"Avec BOM"
        caption 8,"Sans BOM"
        caption 16,"Ouvrir"
        caption 17,"Nouveau"
        caption 18,"Convertir"
        caption 19,"Enregistrer"

      
        application_title "Convertisseur CP1252 <-> UTF-8"
        caption 0,"Convertisseur CP1252 <-> UTF-8"
        
        2d_target_is 4
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,40,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,10,8

        messageUtilisateur$(1) = "Souhaitez-vous recommencer la conversion du fichier ?"
        messageUtilisateur$(2) = "Patientez SVP, traitement en cours..."
        messageUtilisateur$(3) = "Souhaitez-vous enregistrer le projet en cours avant d'en ouvrir un nouveau ?"
        messageUtilisateur$(4) = "Souhaitez-vous enregistrer le projet en cours ?"
        messageUtilisateur$(5) = "Enregistrement impossible : Votre projet est vide !"
        messageUtilisateur$(6) = "Le fichier existe. Le remplacer ?"
        messageUtilisateur$(7) = "Souhaitez-vous enregistrer le projet en cours avant de quitter ?"

    else
        caption 9,"With BOM"
        caption 8,"Without BOM"
        caption 16,"Load"
        caption 17,"New"
        caption 18,"Convert"
        caption 19,"Save"

        APPLICATION_TITLE "CP1252 <-> UTF-8 Converter"
        caption 0,"CP1252 <-> UTF-8 Converter"

        2d_target_is 4
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,10,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,40,8

        messageUtilisateur$(1) = "Do you want to start converting the file again?"
        messageUtilisateur$(2) = "Please wait, processing in progress ..."
        messageUtilisateur$(3) = "Do you want to save the current project before opening a new one?"
        messageUtilisateur$(4) = "Do you want to save the current project?"
        messageUtilisateur$(5) = "Cannot save: Your project is empty!"
        messageUtilisateur$(6) = "The file exists. Replace it ?"
        messageUtilisateur$(7) = "Would you like to save the current project before exiting?"

    end_if

    legendeTextesAvecPoids()
    actualiserAffichage()

end_sub
' ----------------------------------------------------------------------
sub legendeTextesAvecPoids()

    if langage% = 1 :' francais
        if len(text$(13)) < 2
            caption 11,"Texte original : " + str$(len(text$(13))) + " octet"
        else
            caption 11,"Texte original : " + str$(len(text$(13))) + " octets"
        end_if    

        if len(text$(15)) < 2
            caption 14,"Aperçu texte converti : " + str$(len(text$(15)))+" octet"
        else    
            caption 14,"Aperçu texte converti : " + str$(len(text$(15)))+" octets"
        end_if    
    else
        if len(text$(13)) < 2
            caption 11,"Original text: " + str$(len(text$(13))) + " byte"
        else
            caption 11,"Original text: " + str$(len(text$(13))) + " bytes"
        end_if    

        if len(text$(15)) < 2
            caption 14,"Preview converted text: " + str$(len(text$(15)))+" byte"
        else    
            caption 14,"Preview converted text: " + str$(len(text$(15)))+" bytes"
        end_if    
    end_if

end_sub
' ----------------------------------------------------------------------
legendeTextesSansPoids:

    if langage% = 1 :' francais
        caption 11,"Texte original : "
        caption 14,"Aperçu texte converti : "
    else
        caption 11,"Original text: "
        caption 14,"Preview converted text: "
     end_if

return
' ----------------------------------------------------------------------
Redimensionner:
    actualiserAffichage()
return
' ----------------------------------------------------------------------
sub actualiserAffichage()
    dim_local titre1$, titre2$
    
    off_resize 0

    if sensTranscodage% = 1

        show 7
        show 8
        show 9

        2d_target_is 1
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,10,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,40,8

        if langage% = 1
            titre1$ = "Conversion"
            titre2$ = "CP-1252 vers UTF-8"
            left 8,width_client(0) - 188
        else
            titre1$ = "CP-1252 to UTF-8"
            titre2$ = "Conversion"
           left 8,width_client(0) - 206
        end_if

    else

        hide 7
        hide 8
        hide 9

        2d_target_is 1
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,40,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,10,8

        if langage% = 1
            titre1$ = "Conversion"
            titre2$ = "UTF-8 vers CP-1252"
        else
            titre1$ = "UTF-8 to CP-1252"
            titre2$ = "Conversion"
        end_if    

    end_if
    
    if bom% = 1
        2d_target_is 7
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,40,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,10,8
    else
        2d_target_is 7
        2d_pen_color 30,30,30
        2d_fill_color 30,30,30
        2d_circle 10,10,8
        2d_pen_color 255,255,255
        2d_fill_color 255,255,255
        2d_circle 10,40,8
    end_if
    
    if width(0) < 680
        width 0,680
    end_if

    if height(0) < 400
        height 0,400
    end_if
    
    if width_client(0) < 1080
        font_size 21,20
        top 21,16
        left 21,(width_client(0) - text_width(titre1$,21))/2
        caption 21,titre1$
        
        show 22
        font_size 22,20
        top 22,55
        left 22,(width_client(0) - text_width(titre2$,22))/2
        caption 22,titre2$
    else
        hide 22
        font_size 21,30
        top 21,24
        left 21,(width_client(0) - text_width(titre1$ + " " + titre2$,21))/2
        caption 21,titre1$ + " " + titre2$
    end_if

    width 13,width_client(0)-50
    width 15,width_client(0)-50

    left 20,width_client(0) - text_width("Marc - http://panoramic.1fr1.net",20) - 10
    top 20,height_client(0)-20

    left 4,width_client(0) - 65
    left 5,width_client(0) - 83
    left 6,width_client(0) - 83
    left 7,width_client(0) - 125
    left 9,width_client(0) - 188

    top 16,height_client(0)-50
    top 17,height_client(0)-50
    top 18,height_client(0)-50
    top 19,height_client(0)-50


    height 13,(height_client(0)-225)/2
    height 15,(height_client(0)-225)/2
    top 15,height(13)+150

    top 14,105 + height(13) + 20


    on_resize 0,Redimensionner
end_sub
' ----------------------------------------------------------------------
quitter:
    CLOSE_INACTIVE
    if text$(15) <> ""
        reponseUtilisateur% = message_confirmation_yes_no(messageUtilisateur$(7))
        if reponseUtilisateur% = 0
            return
        end_if
        if reponseUtilisateur% = 1
            enregistrement()
            terminate
        end_if
    end_if
    CLOSE_ACTIVE
return


Mode d’emploi :

1) Sélectionnez la langue des menus (par défaut Français) ;

2) Choisir le sens de conversion CP-1252 vers UTF-8 ou inversement ;

3) Pour CP-1252 vers UTF-8, choisir éventuellement l’ajout de l’entête BOM ;

4) Chargez votre fichier à convertir avec le bouton Ouvrir ou taper votre texte original dans la fenêtre du haut ;

5) Cliquez sur Convertir et patientez. Suivant les ordinateurs, la conversion d’un fichier d'un mégaoctet peut prendre entre 3 et 10 minutes. Toutes les commandes sont bloquées durant ce laps de temps.

6) Enregistrez votre fichier converti.

La fenêtre du bas vous livre un aperçu du texte converti. A l’aide du clavier, vous pouvez corriger les éventuelles imperfections de la conversion avant d’enregistrer votre texte converti.


>>>> Le premier post a été mis à jour également. <<<<



Bonne programmation à tous !
Revenir en haut Aller en bas
Contenu sponsorisé





Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty
MessageSujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8   Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Empty

Revenir en haut Aller en bas
 
Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Conversion de fichiers texte OEM vers ANSI
» Colorimétrie : convertisseur RVB vers TSL
» Colorimétrie : convertisseur RVB vers TSV
» Colorimétrie : convertisseur TSL vers RVB
» Colorimétrie : convertisseur TSV vers RVB

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: