Caractère absent ou incorrect ASCII affiché en VB

notpa01 Messages postés 95 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 14 janvier 2012 - 13 janv. 2012 à 14:26
notpa01 Messages postés 95 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 14 janvier 2012 - 14 janv. 2012 à 11:00
Bonjour à tous et bonne année 2012 !

Les codes ASCII ne sont pas tous les mêmes suivant les machines. J'ai donc écrit un petit programme en VB6 qui liste les codes ASCII de 000 à 255. Mais les valeurs affichées ne correspondent toujours pas à celles affichées lorsque l'on fait un Alt+valeur.
Ex : en faisant Alt+144 dans un message ou dans le blocnote, j'ai É (E majuscule accent aigu). Avec mon programme, j'ai une barre (gras) verticale. Autre exemple : Alt+026 donne @ dans le blocnote, et dans mon programme une petite flèche à droite.

Code utilisé :

Private Sub Form_Load()
Dim v As String ' work
Dim x As String ' work
Dim a As Integer ' valeur ascii de 000 à 255
Dim c As Integer ' n° de colonne
Dim r As Integer ' n° de ligne
'
x = 0
c = 0
r = 0
'
For c = 0 To 7 ' loop pour colonnes
For r = 0 To 31 ' loop pour lignes
coda.Col = c
coda.Row = r
coda.ColWidth(c) = 1200
'
v = Chr(a)
x = a & " " & v
If a < 10 Then x = "00" & a & " " & v
If a > 9 And a < 100 Then x = "0" & a & " " & v
coda.Text = x
a = a + 1

Next r
r = 0
Next c

End Sub


Lancer VB, dans la forme, créer un controle Grid appelé coda , width 9735, Height 9615, Rows = 32, Cols = 8. Copier le code ci dessus dans le Form_Load() et l’exécuter. Vous verrez que tous les caractères ne sont pas affichés, ou alors différents de ce que l'on peut avoir avec Alt+valeur.

Résultat de mon programme :



Voyez-vous une raison à cette différence d'affichage par rapport à Alt+valeur ?

Merci de votre aide !

J'en ai marre de prendre de l'ASCII...rine !

Notpa01

11 réponses

cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
13 janv. 2012 à 17:28
Bonjour,

Ce n'est pas le code ASCII qui change...
C'est le caractère qui correspond à ce code qui est différent selon la police que tu utilises.

Cheyenne
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
13 janv. 2012 à 17:37
Re,

Bonne année à toi également.

Cheyenne
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 janv. 2012 à 17:54
Salut

Les codes ASCII sont uniques.
ASCII : "American Standard Code for Information Interchange"
Ceux que tu peux générer dans NotePad doit dépendre de la langue et du "Code page", voire des caractères Unicode sur 2 octets (URF 8, 16, 32).
Si tu ouvres l'aide de ton IDE VB6 dans la section "Jeu de caractères (0 à 127)" et idem "(128 à 255)", tu auras la liste de ces codes.
A l'origine, ces codes étaient sur 7 bits, donc ne définissaient que les codes 0 à 127; le 8ième bit a permis d'étendre à 255.
Les caractères inférieurs à 32 et le 127 n'ont pas de représentation graphique.
Remarque, tout est décrit sur <Wikipedia>

En fait, quel est ton problème réel avec les caractères ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
notpa01 Messages postés 95 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 14 janvier 2012
13 janv. 2012 à 18:57
Hello,

Merci pour vos réponses !

Tu as raison, Cheyenne. Je me suis mal exprimé : le code ne change pas ! 007 sera toujours 007 comme disait James Bond !

Mon problème, Jack ? Simple : prenons par exemple le code 144. Avec mon programme, j'ai un caractère non imprimable (|). En faisant Alt+144, j'ai (dans le bloc-note, ma messagerie, MS Word, et.) le caractère É (é majuscule) alors que dans mon tableau, le É est affecté au nombre 201. Ce n'est qu'un exemple, il y a un tas de caractères qui sont différents entre mon tableau et Alt+ pour le même code ASCII.

Merci du coup de main.

Notpa01
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
notpa01 Messages postés 95 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 14 janvier 2012
13 janv. 2012 à 19:14
Re,

Beaucoup plus simple pour montrer mon problème :

Private Sub Form_Load()
MsgBox Chr(165)
' affiche le yen
End
' Alt=165 donne Ñ
End Sub

Notpa01
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
13 janv. 2012 à 20:01
Re,

Pour revenir à ton premier post, mets ton Notepad avec la même police que tu utilises dans VB6, tu auras dans les deux cas toujours le yen avec le code 165.(ceci pour la majorité des polices, hors polices spéciales comme Symbol, etc...)

J'ai Courier New dans l'IDE et également dans le NotePad et j'obtiens le yen dans les deux cas.

Il faut que les polices que tu utilises soient identiques pour obtenir le même caractères avec le même code.

Si dans ton IDE, tu as une police X et que ton contrôle Grid a une police Y, il est évident qu'il n'y aurait pas forcément correspondance selon le type de police utilisée.

Cheyenne
0
notpa01 Messages postés 95 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 14 janvier 2012
13 janv. 2012 à 20:14
D'accord avec toi. Si les polices sont différentes, cela peut expliquer les différences. Mais dans les 2 cas (Grid de VB6 et bloc-note), j'utilise le MS Sans Serif... Et ce n'est pas pareil.

Essaie avec mon petit exemple de MsgBox (je ne crois pas que l'on puisse changer la police dans un MsgBox). Tu as pareil que moi ?

???

Notpa
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 janv. 2012 à 20:23
Bonjour,

Les polices n'ont rien à voir ici.
Alt + 165 frappé au clavier ===>> caractère 209 et non 165...


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
13 janv. 2012 à 20:47
Grâce à ucfoutu, que je salue au passage, je pense avoir trouvé le pourquoi du comment.

Si, en effet, tu tapes Alt+165 tu obtiens le Ñ,
qui correspond bien au code 209.

Par contre, si tu tapes Alt+0165 tu obtiens ¥.

Voilà, où je crois, se situe le problème

Cheyenne
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
14 janv. 2012 à 02:23
Donc, caractères codés sur 2 octets = Unicode.

Sinon, jette un œil instructif à ce convertisseur ANSI - ASCII : <lien Codyx>
0
notpa01 Messages postés 95 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 14 janvier 2012
14 janv. 2012 à 11:00
Bonjour Cheyenne et Jack,

OK. Je comprends mieux, grâce au coup du zéro avant la valeur. Exemple, Alt+191 donne (petit crochet gauche), et Alt+0191 donne ¿
. Note : dans mon texte en saisie, j'ai un petit crochet gauche avec Alt+191, mais en aperçu, j'ai un point d’interrogation. Encore une conversion...

Donc, mon programme ne correspond pas (totalement) aux possibilités offertes pas la combinaison de touches Alt. Mais comme je ne peux pas passer une valeur ASCII sur 4 caractère dans la fonction CHR (le zéro de gauche est ignoré), comment faire alors pour simuler Alt+nnnn (4 car.) ?

Le but initial de ce petit programme était d'afficher les caractères en fonction de la valeur passée par Alt+. Je m'aperçois que j'ai fait fausse route (par ignorance).

Jack, je regarde de plus près la gestion des Unicodes.

Merci à vous !

Notpa01
0
Rejoignez-nous