OVH Cloud OVH Cloud

Différence entre fromCharCode et Chr du VBScript

2 réponses
Avatar
Forje
Bonjour à tous,

Dans un contexte HTML / Internet Explorer je tente de construire une
chaine binaire avec la méthode fromCharCode à l'instar d'un exemple de
code à ma disposition et écrit en VBScript.

Voici le code en VBScript :

<vb..
strData = Chr( 127 ) & Chr( 128 ) & Chr( 128 )
myObj.Meth strData
</vb..

Avec ce code tout va bien. La chaine transmise à l'objet est bien x7F
x80 x81

Maintenant en Javascript :

<js..
strData = String.fromCharCode( 127 ) + String.fromCharCode( 128 ) +
String.fromCharCode( 129 );
myObj.Meth( strData );
</js..

Là tout va mal ! La chaine transmise est x7F x3F (= "?") x81

(Dans mon cas l'objet est un controle ActiveX qui accède au port série
du PC mais le phénomène est constaté aussi sans).

Bref, certaines valeurs (en particulier au dessus de 127 [0x7F] ) sont
erronées.

De prime abord ça fait penser à un pb de nombre signés/non signés, la
chose étrange est que la valeur 0x81 est correcte (0x82 et suivantes ne
le sont pas).

J'ai aussi regardé du côté Unicode (produit par fromCharCode) mais
j'avoue m'y perdre un peu.

Alors si quelqu'un à une explication...

Merci d'avance.

--
Forje

2 réponses

Avatar
YD

Bonjour à tous,

Dans un contexte HTML / Internet Explorer je tente de construire une
chaine binaire avec la méthode fromCharCode à l'instar d'un exemple de
code à ma disposition et écrit en VBScript. [...]


Ce code fonctionne comme on s'y attend :

var i, a="";
for( i7;i<150;i++)
a+=String.fromCharCode(i);

for (i=0;i<a.length;i++)
document.write(a.charCodeAt(i)+" - ");

Le problème ne vient donc pas du js, mais du contrôle qui est peut être
dérouté de recevoir des valeurs sur 16 bits ?

La méthode chr fonctionne avec des valeurs d'un octet. En javascript,
d'après la norme, le codage des caractères se fait sur deux octets.

Peut-être une piste...

--
Y.D.

Avatar
Forje

Bonjour à tous,

Dans un contexte HTML / Internet Explorer je tente de construire une
chaine binaire avec la méthode fromCharCode à l'instar d'un exemple de
code à ma disposition et écrit en VBScript. [...]



Ce code fonctionne comme on s'y attend :

var i, a="";
for( i7;i<150;i++)
a+=String.fromCharCode(i);

for (i=0;i<a.length;i++)
document.write(a.charCodeAt(i)+" - ");

Le problème ne vient donc pas du js, mais du contrôle qui est peut être
dérouté de recevoir des valeurs sur 16 bits ?

La méthode chr fonctionne avec des valeurs d'un octet. En javascript,
d'après la norme, le codage des caractères se fait sur deux octets.

Peut-être une piste...

Merci pour la piste, il y a certainement un pb dans le contrôle activex

(je n'ai pas accès au code). En attendant j'utilise un intermédiaire en
VBScript qui fait le travail et qui est appelé par le JS. Tout va bien.

Ce qui me surprend dans l'histoire c'est que la valeur 0x80 ne "passe"
pas en revanche 0x81 passe (le premier 128 est à remplacer par 129 dans
mon post initial).

--
Forje