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

Résolu
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 12 juin 2007 à 11:49
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre 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

12 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 juin 2007 à 12:51
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
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
12 juin 2007 à 14:31
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
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
12 juin 2007 à 15:20
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.
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 juin 2007 à 11:59
ChrW => Unicode

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0

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

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
12 juin 2007 à 12:01
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
12 juin 2007 à 12:03
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 juin 2007 à 12:09
"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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
12 juin 2007 à 12:28
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
12 juin 2007 à 13:06
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 juin 2007 à 15:19
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
12 juin 2007 à 15:22
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
12 juin 2007 à 15:26
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
0
Rejoignez-nous