Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 | |
| | Auteur | Message |
---|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 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 : 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 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 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é... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 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/ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 9 Oct 2020 - 15:42 | |
| Merci Marc, je vais faire joujou avec ça ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 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... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 9 Oct 2020 - 18:26 | |
| Hum intéressant tout ça. Merci à tous les 2 pour le partage ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Sam 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:
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Sam 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/10EFFECTIVEMENT 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 | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Sam 10 Oct 2020 - 12:40 | |
| Bonjour à tous ! 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 : Avec Panoramic Editor : 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 10Ligne 16 => FILE_LOAD 10,rr$+"Result.txt"Malheureusement, le fichier de sortie Result.txt est toujours en UFT-8. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Sam 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é... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Lun 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_octetsA bientôt ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Lun 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 ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Lun 12 Oct 2020 - 21:28 | |
| Bonsoir Marc, Toi qui sais tout (un peu de pommade n'a jamais fait de mal à personne ) 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 ?). | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Lun 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. 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. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Mar 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...
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Jeu 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 ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 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… Le nouvel utilitaire : - 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_octetsDans 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 | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 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 ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 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 !)
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... 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 ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 16 Oct 2020 - 22:37 | |
| J’ai mis pour toi, sur mon webdav Jules_Verne.zip | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 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. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Ven 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. 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é. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Sam 17 Oct 2020 - 9:22 | |
| Très bon travail Marc. Merci pour le partage ! Juste une petite correction... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Sam 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. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 Mer 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 ! | |
| | | Contenu sponsorisé
| Sujet: Re: Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 | |
| |
| | | | Convertisseur UTF-8 vers ANSI et ANSI vers UTF-8 | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |