Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction Chr() donne un résultat différents sur un windows européen ou japonais

4 réponses
Avatar
schaperot
Bonjour à toutes et à tous,

L'application dont j'ai la charge fonctionne sans problème sur
des PC exécutant des windows occidentaux (français, allemand,
anglais... américain).

Cette même application présente des dysfonctionnement sur un
PC exécutant un windows japonais.

Après analyse, il s'agit de la fonction chr qui selon le système
d'exploitation ne renvoie pas le même caractère pour des codes
ascii tels que 244, 245. Je n'ai pas pu tester tous les codes ascii.

Le but est de construire une chaine (string) par concaténation de caractères
obtenus via la fonction chr(). Les codes ascii varient de &h00 à &hFF.
Par la suite, l'application manipule cette chaine avec les fonctions
habituelles
(mid(), left(), right...).

Merci de vos avis et idées.

4 réponses

Avatar
jean-marc
"schaperot" wrote in message
news:412308c1$0$13683$
Bonjour à toutes et à tous,

L'application dont j'ai la charge fonctionne sans problème sur
des PC exécutant des windows occidentaux (français, allemand,
anglais... américain).

Cette même application présente des dysfonctionnement sur un
PC exécutant un windows japonais.

Après analyse, il s'agit de la fonction chr qui selon le système
d'exploitation ne renvoie pas le même caractère pour des codes
ascii tels que 244, 245. Je n'ai pas pu tester tous les codes ascii.

Le but est de construire une chaine (string) par concaténation de


caractères
obtenus via la fonction chr(). Les codes ascii varient de &h00 à &hFF.
Par la suite, l'application manipule cette chaine avec les fonctions
habituelles
(mid(), left(), right...).




Hello,
c'est tout à fait normal:
le jeu de caractères ASCII comporte les caractères de 0 à 128, parfaitement
définis par la norme ANSI X3.4-1968 (voir aussi la ANSI X3.110-1983)
Voici les table:
ftp://dkuug.dk/i18n/WG15-collection/charmaps/ANSI_X3.4-1968
ftp://dkuug.dk/i18n/WG15-collection/charmaps/ANSI_X3.110-1983

Les caractères suivants, de 128 à 255 ne font PAS partie du jeu de
caractères ASCII, mais ASCII étendu.

Les caractères de l'ASCII étendu dépendent d'autres normes, par exmeple
l'ISO Latin1
http://www.indwes.edu/Faculty/bcupp/things/latin1.htm

Donc, quand tu dis:
Après analyse, il s'agit de la fonction chr qui selon le système
d'exploitation ne renvoie pas le même caractère pour des codes
ascii tels que 244, 245. Je n'ai pas pu tester tous les codes ascii.



tout est clair: 244 et 245 ne sont PAS des codes ASCII, mais des codes dont
la représentation peut varier librement en fonction de la machine, du pays,
de la page de code utilisée, etc.

Dans ton cas, une solution est de définir une table de correspondance pour
les codes étendus, de 128 à 255. Tu devras construitre cette table en
fonction de tes besoins.

Jean-marc
Avatar
schaperot
> tout est clair: 244 et 245 ne sont PAS des codes ASCII, mais des codes


dont
la représentation peut varier librement en fonction de la machine, du


pays,
de la page de code utilisée, etc.

Dans ton cas, une solution est de définir une table de correspondance pour
les codes étendus, de 128 à 255. Tu devras construitre cette table en
fonction de tes besoins.



Merci de ta réponse, je vais cependant apporter une information
supplmentaires.

Les caractères ne sont pas destinés à être affichés, mais à être stockés.
Après
manipulation des chaines, j'utilise la fonction Asc() pour retrouver le code
ascii
du caractère stocké à la Nième position. C'est durant la récupération que je
rencontre
le pb. En fait, le problème vient peut-être de la fonction Asc... Je ne sais
pas ce qui
est stocké réellement dans la string.

Pour résumer :
Windows occidental
Asc(Chr(244))$4
Asc(Chr(245))$5

Windows japonais
Asc(Chr(244))=0
Asc(Chr(245))=0
Avatar
Jean-Marc
"schaperot" a écrit dans le message de
news:41237800$0$27153$
> tout est clair: 244 et 245 ne sont PAS des codes ASCII, mais des codes
dont
> la représentation peut varier librement en fonction de la machine, du
pays,
> de la page de code utilisée, etc.
>
> Dans ton cas, une solution est de définir une table de correspondance


pour
> les codes étendus, de 128 à 255. Tu devras construitre cette table en
> fonction de tes besoins.

Merci de ta réponse, je vais cependant apporter une information
supplmentaires.

Les caractères ne sont pas destinés à être affichés, mais à être stockés.
Après
manipulation des chaines, j'utilise la fonction Asc() pour retrouver le


code
ascii
du caractère stocké à la Nième position. C'est durant la récupération que


je
rencontre
le pb. En fait, le problème vient peut-être de la fonction Asc... Je ne


sais
pas ce qui
est stocké réellement dans la string.

Pour résumer :
Windows occidental
Asc(Chr(244))$4
Asc(Chr(245))$5

Windows japonais
Asc(Chr(244))=0
Asc(Chr(245))=0




Il faut aborder le problème sous un autre angle alors.
Comment se fait l'acquisition de la string que tu dois traîter? entrée au
clavier ? lecture depuis un fichier ? car ce 244 et 245 que tu décris, il
viennent bien de qq part. Si il viennent d'un fichier, alors une lecture en
mode binaire sera la solution.

Jean-marc
Avatar
ng
Salut,

Petite note au passage qui n'a rien à voir avec le problème, utilise plutot
Chr$() que Chr(), idem pour Left$(), Mid$(), Right$(), Trim$()...

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



schaperot a écrit :

Bonjour à toutes et à tous,

L'application dont j'ai la charge fonctionne sans problème sur
des PC exécutant des windows occidentaux (français, allemand,
anglais... américain).

Cette même application présente des dysfonctionnement sur un
PC exécutant un windows japonais.

Après analyse, il s'agit de la fonction chr qui selon le système
d'exploitation ne renvoie pas le même caractère pour des codes
ascii tels que 244, 245. Je n'ai pas pu tester tous les codes ascii.

Le but est de construire une chaine (string) par concaténation de
caractères obtenus via la fonction chr(). Les codes ascii varient de
&h00 à &hFF.
Par la suite, l'application manipule cette chaine avec les fonctions
habituelles
(mid(), left(), right...).

Merci de vos avis et idées.