PeekANSI() - Lire de l'ASCII accentué en Unicode

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

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Zorro »

ouaip , tain les nazes !! :lol:
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
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Kwai chang caine »

Zorro a écrit :ps : si quelqu'un d'autre a XP chez lui (KCC ??? )
Plus vraiment ...pour une fois que j'aurais pu être utile :oops:
Il me reste des machines en XP mais ce n'est plus ma principale, j'ai trouvé un super systeme "ToutDansUn" qui va pas mal pour le remplacer :mrgreen:
ouaip , tain les nazes !!
Je dirais même plus ...
Image
ouaip , tain les pures nazes !!
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Marc56 »

ps : si quelqu'un d'autre a XP chez lui (KCC ??? )
testez ce code vous devriez avoir l'affichage de ce caractere : "░" dans le débugger !! ?? (en compilant Pb 5.50 32 bits)
Non :|

(XP Pro (dans une VM) sans aucune autre police installée)
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Zorro »

ouaip, c'est chelou quand meme

tu peux tester ce code ? (compilation Pb 5.50 32bits )

Code : Tout sélectionner

; 
 Declare.s ascii_sous_unicode(monmessageansi.s)
; 
; debug Ascii_sous_unicode(chr(176)  ) ; respecte les accents
; 



OpenConsole("test")
For i=1 to 255
print (Ascii_sous_unicode(chr(i)))
Next i
Input()
CloseConsole()




Procedure.s Ascii_sous_unicode(MonMessageANSI.s) 
 		MonMessageASCII.s = space(Len(MonMessageANSI.s))
 		;CharToOem_(@MonMessageANSI.s, @MonMessageASCII.s) 
 		OemToChar_(@MonMessageANSI.s, @MonMessageASCII.s)
 		ProcedureReturn MonMessageASCII.s
 EndProcedure

; Epb

chez moi ça affiche :

Image


ps : mais bon j'aurai preféré un teste sur un vrais XP ...

et a tout hasard essaye la ligne commenté CharToOem
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Marc56 »

Zorro a écrit :tu peux tester ce code ? (compilation Pb 5.50 32bits )
Voilà
(et la fenêtre de debug de ton exemple précédent ramenée par dessus)
Image
Zorro a écrit :ps : mais bon j'aurai préféré un teste sur un vrai XP ...
C'est un vrai XP Pro avec licence, installé depuis un CD officiel avec numéro de série officiel enregistré. etc. :)
Le fait qu'il soit installé dans une VM (VirtualBox 5) ne change rien à son fonctionnement interne. Il n'a pas conscience du système hôte.
Zorro a écrit :et a tout hasard essaye la ligne commenté CharToOem
Pareil.

:wink:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Zorro »

haaa mais là c'est pas pareil !! :D

tu me demontre qu'en mode console mon code fonctionne tres bien sous XP !!
tout les caracteres graphique apparaissent , comme sous Seven !!

seul le debugger PB sous XP semble avoir un probleme ....et ne pas afficher le caractere
il est possible que le debugger PB sous windows plante a ce niveau ....(probleme de drapeau unicode au niveau compilateur ? )


mais du moment que ça marche en console, ça montre bien que la fonte existe et est bien compatible !!!
tout les caracteres graphique apparaissent , comme sous Seven !! :) (et comme sous DOS)


et maintenant a tout hasard essaye celui la

Code : Tout sélectionner

; modifié Zorro

Enumeration
		#Win 
		#list
EndEnumeration

Declare.s Ascii_sous_unicode(MonMessageANSI.s)

Enumeration
		#Font 
EndEnumeration

LoadFont(#font,"Lucida",10)
SetGadgetFont(#PB_Default, FontID(#font)) 


debug Ascii_sous_unicode(chr(203)  ) ; respecte les accents

OpenWindow(#Win , 0, 0, 880, 500, "ascii...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#list, 0, 0, 880, 500, "0..31", 110,#PB_ListIcon_GridLines)
AddGadgetColumn(#list, 1, "32..63", 110)
AddGadgetColumn(#list, 2, "64..95", 110)
AddGadgetColumn(#list, 3, "96..127", 110)
AddGadgetColumn(#list, 4, "128..159", 110)
AddGadgetColumn(#list, 5, "160..191", 110)
AddGadgetColumn(#list, 6, "192..223", 110)
AddGadgetColumn(#list, 7, "224..255", 110)
ii.s=chr(10)
For i=0 To 31
		i$=Ascii_sous_unicode(chr(i))
		i2$=Ascii_sous_unicode(chr(i+32))
		i3$=Ascii_sous_unicode(chr(i+64))
		i4$=Ascii_sous_unicode(chr(i+96))
		i5$=Ascii_sous_unicode(chr(i+128))
		i6$=Ascii_sous_unicode(chr(i+160))
		i7$=Ascii_sous_unicode(chr(i+192))
		i8$=Ascii_sous_unicode(chr(i+224))
		AddGadgetItem(#list, -1,Str(i)+" "+i$+ii.s+Str(i+32)+" "+i2$+ii.s+ Str(i+64)+" "+i3$+ii.s+ Str(i+96)+" "+i4$+ii.s+ Str(i+128)+" "+i5$+ii.s+ Str(i+160)+" "+i6$+ii.s+ Str(i+192)+" "+i7$+ii.s+Str(i+224)+" "+i8$+#LF$)	
Next i
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Procedure.s Ascii_sous_unicode(MonMessageANSI.s) 
		MonMessageASCII.s = space(Len(MonMessageANSI.s))
		;CharToOem_(@MonMessageANSI.s, @MonMessageASCII.s) 
		OemToChar_(@MonMessageANSI.s, @MonMessageASCII.s)
		ProcedureReturn MonMessageASCII.s
EndProcedure

; Epb


Dernière modification par Zorro le jeu. 15/sept./2016 8:30, modifié 1 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Marc56 »

Zorro a écrit :et maintenant a tout hasard essaye celui la
...

Image

PS. Pour ton premier exemple j'avais aussi fait l'essai en utilisant le fonte Consolas (installé exprès): même résultat.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Zorro »

Merci :)

bon ça plante .... mais pas en mode console .... !!! cherchez l'erreur

peut etre l'api utilisé ....
Minimum supported client
Windows 2000 Professional [desktop apps only]
Dernière modification par Zorro le mer. 14/sept./2016 17:30, modifié 1 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Marc56 »

J'ai aussi changé la police utilisée par le débug (graphique) sans effet avec les polices fournies.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Zorro »

c'est je pense un probleme de selection de page de code
j'avais vu passer un code a ce sujet... faudrai qu je recherche

ce code , de memoire, permettait le choix de la page de code (850,1252 ect...)

explication ici :
https://msdn.microsoft.com/en-us/librar ... s.85).aspx

de toute façons, tout ceci est obsolète ,en PB on utilise l'unicode le UTF8, et ça roule !
qu'elle idée d'utiliser des caractères désués (bon il marche ne console c'est deja ça ... )
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
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par djes »

C'est quand je vois ce genre de sujet que j'ai l'impression d'être un dinosaure. (Attention souvenirs de vieux combattant) Que de temps passé, que de travail sur des problèmes de normes, de choix industriels foireux, avec le DOS et ses pages de codes débiles, l'ASCII bancal qui hésitait entre texte et codes de commande (beep ! ), les terminaux genre Minitel et l'ANSI mode BBS avec ses astuces de sioux Esc[s;Esc[u; et aujourd'hui l'unicode qui n'en finit pas de devenir un standard et qui au final ne l'est plus du tout ..
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Zorro »

c'est clair qu'il y a de quoi perdre son latin :)
c'est une forme d'obsolescence programmé !
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Ollivier »

Je vais t'en faire une obsolescence programmée...
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par Ollivier »

Il manque donc une ligne entre "Else" et "EndIf". C'est celle-là qu'il suffit juste d'insérer :

Code : Tout sélectionner

String = PeekANSI(*A, FindMemoryByte(*A, 0) - *A)
Elle évite de devoir préciser la taille de la chaîne ASCII.
Je n'ai pas le temps nécessaire pour mettre à jour le code. Je relis le sujet, j'y vois beaucoup de superflu hors sujet. Je tâcherai de perdre (et faire perdre) un précieux temps à le nettoyer.

On a donc au final un système d'affichage qui importe de l'ASCII dans un programme Unicode, avec un exemple utilisant une fonte "lucida" quasi-omniprésente sur la plupart des OS, et quasi-complète (il manque 16 caractères étendus locaux, c'est-à-dire propre à chaque pays).

Cela permet d'exécuter d'anciens programmes à affichage "texte" et de les voir afficher sur nos écrans actuels avec tous les avantages techniques desquels l'on dispose (changement d'échelle, impression digne de ce nom, incrustation graphique, etc...)
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: PeekANSI() - Lire de l'ASCII accentué en Unicode

Message par PAPIPP »

Bonjour à tous

Pour résumer, le codage des caractères en informatique et en télécommunication, est l’opération qui associe une table de codage comprenant toute la combinatoire possible et une police de représentation. C’est ce qu’on appelle un jeu de caractères. Afin d’éviter une floraison de jeux de caractères, des standards ont été crées (jeux de caractères codés.) On peut de cette manière cacher le sens de l'information, soit en créant une table de codage particulière soit en créant un police particulière (voir chiffrement)

Les problèmes d'encodage de caractères sont apparus dès que des encodages EBCDIC et ASCII sont apparus dans les années 1960.
La mise en réseau de divers matériels électroniques utilisant des conventions différentes pour le codage des caractères a accentué le problème.
Toutefois, avec l'émergence d'Unicode, et celle d'indicateurs d'encodage, le problème pourrait se réduire à un problème d'interopérabilité.
Voici les types de jeux de caractères codés utilisés par pays

Jeux de caractères codés populaires, par pays
Sur Internet, l'UTF-8 et l'ASCII sont les deux encodages les plus populaires depuis 20109. En juillet 2012, leur utilisation est estimée conjointement à 80 % (UTF-8: 65 % et ASCII: 15 %), contre 10 % environ pour les encodages occidentaux (latin1) et le solde (< 10 %) pour tous les autres.
Amérique
États-Unis
• ISO 646 ;
o ASCII.
Canada
• ASCII, standard de compatibilité, sans accent ;
• ISO 8859-1 ;
• Unicode, voir aussi UTF-8.
Europe
Union européenne
• UTF-8, notamment utilisé par http://www.europa.eu/.
France
• ISO 646-variante de référence internationale (IRV, alias ASCII), standard de compatibilité, sans accent, pour le développement de logiciel en anglais ;
• « Jeu de caractères graphiques français pour la langue française », 94 caractères codés sur 7 bits, normalisé ISO/CEI 646-69 le 1er juin 1983, et normalisé AFNOR NF Z 62 010 en 1982. Aujourd'hui désuet, mais activable par séquence d'échappement ;
o standard de compatibilité ;
o dans l'une de ses deux variantes françaises (AFNOR) ;
o standard du minitel (voir viewdata) ;
• ISO-2022 peu utilisé en France mais reprend tous les caractères français ;
• CP850 à l'époque du DOS ;
• Windows-1252, originaire de Microsoft Windows, encore appelé CP1252 ou Ansinew ;
• ISO 8859-1, avant l'euro ;
• ISO 8859-15, après l'euro ;
• Unicode, voir aussi UTF-8 (reprend tous les caractères des jeux de code précédent).
Grèce
• UTF-8 ;
• ISO 8859-7 (sans l’euro).
Roumanie
• ISO 8859-2 ;
• ISO 8859-16 ;
• UTF-8.
Lituanie
• Windows-1257, pour Windows, utilisé par http://www.lrv.lt/ ;
• UTF-8, utilisé pour la langue française par http://www.president.lt/fr/.
Russie
• KOI8-R ;
• UTF-8.
Ukraine, Bulgarie
• KOI8-U ;
• UTF-8.
Afrique
Maghreb
• UTF-8, utilisé sur http://www.maroc.ma/portailinst/Ar ;
• Windows-1256, utilisé par exemple par http://www.almaghribia.ma/.
Asie
• ISCII (alphasyllabaires utilisés en Inde, au Sri Lanka et au Bangladesh) ;
• VISCII (alphabet latin moderne du vietnamien) ;
• TIS-620 (écriture thaïe) ;
• KSC 5601 (alphabet hangûl du coréen) ;
• GB18030 (écriture sinographique simplifiée des langues chinoises) ;
• Big5 (écriture sinographique traditionnelle des langues chinoises) ;
• Shift-JIS (syllabaires et écriture sinographique traditionnelle des langues japonaises).
Autres codages de caractères populaires
• Codage SMS ;
• ISO 646 : ASCII ;
• EBCDIC ;
• ISO 8859 : ISO 8859-1, ISO 8859-2, ISO 8859-3, ISO 8859-4, ISO 8859-5, ISO 8859-6, ISO 8859-7, ISO 8859-8, ISO 8859-9, ISO 8859-10, ISO 8859-11, ISO 8859-13, ISO 8859-14, ISO 8859-15, ISO 8859-16 ;
• Jeux de caractères codés DOS : CP437, CP737, CP850, CP852, CP855, CP857, CP858, CP860, CP861, CP863, CP865, CP866, CP869 ;
• Jeux de caractères codés Windows : Windows-1250, Windows-1251, Windows-1252, Windows-1253, Windows-1254, Windows-1255, Windows-1256, Windows-1257, Windows-1258 ;
• VISCII ;
• KOI8-R, KOI8-U ;
• TIS-620 ;
• ISCII ;
• ISO 2022, EUC ;
o Big5 : HKSCS ;
o Guobiao : GB2312, GBK, GB18030 ;
o Shift-JIS ;
• ISO/CEI 10646 : Unicode, voir aussi UTF-8.
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Répondre