Convertisseur UTF8 -> ASCII

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Convertisseur UTF8 -> ASCII

Message par Zorro »

si comme moi vous en avez marre des problemes lié a l'unicode avec Purebasic
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 :lol:

tout d'abords, sachez que ça ne transformera pas le chinois en Français hein :mrgreen:
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 :lol:


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 :lol:


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

Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Convertisseur UTF8 -> ASCII

Message par Micoute »

Très bon code, en effet. Merci pour de la partager
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Convertisseur UTF8 -> ASCII

Message par Kwai chang caine »

Mais ça à l'air puissant ton truc 8O

Comme tout ce qui parle de l'UNICODE ..... j'ai rien compris :oops:
Peut être ça sera plus clair un jour à l'usage, parce qu'on a pas fini de se les mordre avec ce problème (enfin surtout moi :| )

Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre