des caracteres bizarres qui s'affichent a la place de nos accents
voici LA solution ...
en fait c'est tellement simple, que je me demande pourquoi j'ai pas cherché ça plus tot
tout d'abords, sachez que ça ne transformera pas le chinois en Français hein
le but c'est de ne plus avoir de problemes lié aux accents ... donc caractere "USA-europeen" only !
ce qu'il faut savoir :
1- les 127 premier code de l'UTF8 sont les memes que l'AScii ! (bon c'est deja ça de moins a convertir )
2- les caracteres de 127 a 255 (l'ascii etendu) qui contiennent nos accents... sont codé en UTF8 sur 2 Octets !
et .... le deuxieme Octet de l'UTF8 c'est le code AScii - 64 !!!! et voila , la recette c'est un KUB OR , et c'est tout
du coup transformer un code UTF8 en Ascii , reviens a ne rien faire si le code du caractere est inferieur a 127
et a prendre le deuxieme Octet, et lui ajouter 64 pour les codes caracteres superieur ou egale a 127 ....
plus simple tu meurs
voici mon code qui marche avec le probleme soulevé par Falsam :
Code : Tout sélectionner
;***********************************************
;Titre :*convertisseur_utf8_to_Ascii
;Auteur :
;Date :30/08/2017
;Heure :16:32:38
;Version Purebasic : PureBasic 5.60 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
Declare.s UTF8toAscii(ttx.s,mode)
;on creer une chaine UTF8
*UTF8 = UTF8("Héhé! Bienvenue dans mon château")
; *********************** Test Code a Zorro *****************************************************************************
; ******************************** EXEMPLE EN PASSANT PAR L'ADRESSE DE LA CHAINE ******************************
retour.s= UTF8toAscii(Peeks(*UTF8 ),#True ) ; le mode #true travail sur memoire
MessageRequester("Version travail en Memoire",retour.s + space(255)) ; j'ajoute 255 espaces pour agrandir la fenetre du messagerequester()
; *********************************************************************************************************************
;ou
; ******************************** EXEMPLE EN PASSANT PAR LA CHAINE DIRECTEMENT ******************************
retour.s= UTF8toAscii("héhé! Bienvenu dans mon château.",#False) ; le mode #False Travail sur caractere
MessageRequester("Version Travail sur Chaine",retour.s+space(255))
; *********************************************************************************************************************
;- Zone Procedures
Procedure.s UTF8toAscii(ttx.s,Mode)
; by Zorro / Dobro
Protected Sortie.s="" ,decal=1 ,i,Long
If Mode=#true ; travail en memoire
Long=Len(ttx.s)*2 ; on prevoi un peu large !
Else ; Travail sur caractere
Long=Len(ttx.s)+1
Endif
For i=0 to long
If Mode=#True ; travail sur memoire
Code.c=PeekA(@ttx.s+i)
Else
Code.c=Asc(Mid(ttx.s,i+decal,1))
Endif
IF Code<127
Sortie.s=Sortie.s+chr(Code.c)
Else
; Traitement .
If Mode=#True ; Travail sur memoire
Code1.c=PeekA(@ttx.s+i)
Code2.c=PeekA(@ttx.s+i+1)
Else
Code1.c=Asc(Mid(ttx.s,i+decal,1))
Code2.c=Asc(Mid(ttx.s,i+decal+1,1))
Endif
; Verif
Sortie.s=Sortie.s+chr(Code2.c+64)
i=i+1
Endif
Next i
ProcedureReturn Sortie.s
EndProcedure
;; Epb