[VB6] Retour des fonctions Chr$() et ChrW() [Résolu]

Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
- - Dernière réponse : jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
- 12 juin 2007 à 15:26
'Lut la communauté.
Aller une petite question.
Si besoin Sur VB6 SP6 (W2K SP4).

L'aide en ligne MSDN étant la même pour Chr$ et ChrW, j'aimerais savoir pourquoi ces deux fonctions ne retourne pas la même chose pour certaines valeurs.

J'ai fait un petit prog qui illustre ce que j'avance.
pour cela ajouter une ListView  ListView1 et executer ce code.
regardez alors les lignes selectionnées.

Option Explicit

Private Sub Form_Load()
Dim Num As Byte
   
   'Propritété du ListView
   With ListView1
       .Left = 0
       .Top = 200
       .MultiSelect = True
       .Width = 9555
       If Me.Width < .Width Then Me.Width = .Width + 250
       .View = lvwReport
       .GridLines = True
       .FullRowSelect = True
       .LabelEdit = lvwManual
       Call .ColumnHeaders.Add(, , "Num")
       Call .ColumnHeaders.Add(, , "Hex(Num)")
       Call .ColumnHeaders.Add(, , "Hex(AscW(Chr$(Num)))")
       Call .ColumnHeaders.Add(, , "Hex(AscW(ChrW(Num)))")
       Call .ColumnHeaders.Add(, , "Chr$(Num)")
       Call .ColumnHeaders.Add(, , "ChrW(Num)")
   End With

   For Num = 0 To 254
       'On rempli le ListView
       With ListView1.ListItems.Add(, "@@" & Num, CStr(Num))
           .SubItems(1) = Hex(Num)
           .SubItems(2) = Hex(AscW(Chr$(Num)))
           .SubItems(3) = Hex(AscW(ChrW(Num)))
           .SubItems(4) = Chr$(Num)
           .SubItems(5) = ChrW(Num)
           If (.SubItems(2) <> .SubItems(3)) Then
               .Selected = True
               .EnsureVisible
           End If
           
       End With
   Next
End Sub , ----
[code.aspx?ID=41455 By Renfield]

Si ces messieurs les Experts en VB6 peuvent m'éclairer cela serait génial...
En attendant vos réponses, liens et autres explications, Google is my friend .
Je vais aller voir aussi cher M$ voir ce que je trouve.
D'avance merci à ceux qui prendront le temps de lire et de répondre.
@+: =89254 Ju£i?n
Pensez: Réponse acceptée
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
3
Merci
j'imagine que tu ne vas pas te contenter d'un simple "c'est comme ça" ....

pas sur qu'il y ait quoi que ce soit a comprendre, suffit, je pense de comparer les tableau de caractères de ces deux manière d'encoder les caractères....

Renfield
Admin CodeS-SourceS- MVP Visual Basic

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
3
Merci
Re,
Bon voici en anglais dans le texte ce que j'ai trouve jusqu'à présent, et cela me pousse à me résigner....

ChrW$() is different from Chr$() because they take different parameter values.
However, ChrW$() equals Chr$() when working with characters from ASCII/Ansi 0 to 127.

Yes. I didn't say that characters 128-159 aren't used in ANSI 1252 it just
they are not same as characters 128-159 in unicode. .

VB does not just add a zero byte for every character.  That's true
for the low ASCII characters, because that's how Unicode is defined...
the first 128 Unicode characters are the traditional ASCII set.  But it
decidedly NOT true for the upper Ansi characters.  To prove it, compare
AscW / ChrW$ with Asc / Chr$ in the range of 129 to 150 or so.

M$: The characters that appear in Windows above 127 depend on the selected typeface. une âme charitable pour rafraichir mon anglais SVP

@+: Ju£i?n
Pensez: Réponse acceptée

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jrivet
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
3
Merci
A ton service, donc, Julien,
encore que :
1) le rédacteur de ce texte anglais semble avoir quelques petites difficultés d'expression dans sa propre langue.
2) ma traduction est ici libre et je l'ai un peu assaisonnée pour qu'elle soit plus digeste :

ChrW$() diffère de Chr$() car ils correspondent à des valeurs de paramètres différentes.
ChrW$() donne toutefois le même résultat que Chr$() si l'on travaille avec des  caractères ASCII/Ansi  compris entre 0 et 127
Achtung ! je ne'ai pas dit que les caractères 128 à 159 ne sont pas utilisés en ANSI 1252 ! Ils ne sont simplement pas les mêmes caractères que les caractères 128 à 159 en Unicode...

Il est vrai que VB ne fait pas qu'ajouter un byte zéro à chaque caractère des caractères de valeur ASCII basse (puisque c'est ainsi qu'est défini l'unicode)...
Les 128 premiers caractères Unicode sont tout simplement le jeu ASCII traditionnel.
Mais ceci n'est sans aucun doute PAS VRAI en ce qui concerne les caractères Ansi de rang élevé.
Pour le prouver :
comparons :
AscW / ChrW$
avec
Asc / Chr$
dans l'intervalle 129 to 150 (ou similaire)
M$: les caractères qu'affiche Windows au dessus de la valeur 127 dépendent du "typeface" choisi" 

Amitiés.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
ChrW => Unicode

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
Re,
Merci d'avoir répondu.
oui je sais mais pourquoi alors pour des valeurs "simples" 0 à 255 les deux ne retournent pas la même chose.

D'ailleurs dans mon cas c'est ce que retourne Chr$ qui me turlupine.

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
Bonjour Julien,

Si ta machine supporte Unicode, voilà :

The ChrW function returns a String containing the Unicode character except on platforms where Unicode is not supported
Commenter la réponse de jmfmarques
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
"D'ailleurs dans mon cas c'est ce que retourne Chr$ qui me turlupine."

0-127 c'est identique, c'est ensuite que ca se gatte....

normal, l'ascii ne comporte que 128 caractères ^^ les 128 autres ? l'ascii étendu.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
Re,
OK
Mais pourquoi les deux fonctions retombe d'accord à 160... ca paraît simple , mais là je ne comprends pas.

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
Re,
Dois je me résigner... ou perdre mon temps à continuer à chercher le pourquoi du parce que (oui je sais c'est la vache)

Si vraiment "c'est comme ça" .... et bien soit je cloturerais...mais je vais continuer à chercher un peu.
Si d'autres veulent enfoncer le clou...

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
pour quelle partie ?

tout traduire ?

te dit qu'en gros, ca depend de ta police & co

me demande bien pourquoi cela te pose de tels problemes ....

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
Re,
Merci non pas tout c'était pour TypeFace.
NOn Mais voila je me suis résolu avec cela
Yes. I didn't say that characters 128-159 aren't used in ANSI 1252 it just
they are not same as characters 128-159 in unicode. .

Tu avais donc raison "c'est comme ca"....

MINCE quand même. => Ctrl + H ...

Merci pour tout.

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
Re,
Sorry , Topic Croisé.
Merci pour la traduc
Aller Topic Résolu.
Merci à vous deux et bonne journée. m'en vais faire mes modif.... sont pénibles ces chinois et ces Russes c'est à cause d'eux que je dois tout changer a cause de leur signes....

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.