Caractère absent ou incorrect ASCII affiché en VB

Signaler
Messages postés
95
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
14 janvier 2012
-
Messages postés
95
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
14 janvier 2012
-
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

Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
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
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Re,

Bonne année à toi également.

Cheyenne
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
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)
Messages postés
95
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
14 janvier 2012

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
Messages postés
95
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
14 janvier 2012

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
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
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
Messages postés
95
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
14 janvier 2012

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Donc, caractères codés sur 2 octets = Unicode.

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

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