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

Encoder un string en iso-ISO-8859-1

5 réponses
Avatar
Frédéric LAMBOUR
Bonjour,

Help help help j'en suis la : Encoding oEncoder = new
Encoding.GetEncoding("ISO-8859-1");
pour le reste je sèche.

Merci de votre aide

5 réponses

Avatar
Gilles TOURREAU
Le Thu, 26 Apr 2007 18:14:25 +0200, Frédéric LAMBOUR
a écrit:

Bonjour,

Help help help j'en suis la : Encoding oEncoder = new
Encoding.GetEncoding("ISO-8859-1");
pour le reste je sèche.

Merci de votre aide





Les chaines de caractères sous .NET sont toujours en Unicode...

Les classes Encoding servent uniquement à récuperer/écrire des données
dans un autre format provenant d'une source extérieure tel que les
fichiers, les sockets,...etc pour mettre en mémoire des chaines de
caractères .NET Unicode...

Pourrais-tu préciser pourquoi tu as besoin de convertir une chaine de
caractère en ISO ?

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Frédéric LAMBOUR
Hello,

C'est tout a fait possible puisque je l'ai fait il y a quelques années (j'ai
perdu le code malheureusement). Je me souvient que c'était très simple mais
pas du code :-(

C'est pour consommer un service web qui fonctionne en ("ISO-8859-1" pour lui
passer un paramètre de type string

"Gilles TOURREAU" a écrit dans le message de news:

Le Thu, 26 Apr 2007 18:14:25 +0200, Frédéric LAMBOUR
a écrit:

Bonjour,

Help help help j'en suis la : Encoding oEncoder = new
Encoding.GetEncoding("ISO-8859-1");
pour le reste je sèche.

Merci de votre aide





Les chaines de caractères sous .NET sont toujours en Unicode...

Les classes Encoding servent uniquement à récuperer/écrire des données
dans un autre format provenant d'une source extérieure tel que les
fichiers, les sockets,...etc pour mettre en mémoire des chaines de
caractères .NET Unicode...

Pourrais-tu préciser pourquoi tu as besoin de convertir une chaine de
caractère en ISO ?

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr


Avatar
Fred
Dans : news:%,
Frédéric LAMBOUR écrivait :
Hello,




Hello,

Help help help j'en suis la : Encoding oEncoder = new
Encoding.GetEncoding("ISO-8859-1");







oEncoder.GetBytes(taChaîne) devrait te renvoyer les octets
correspondants dans l'encodage 8859-1


--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Gilles TOURREAU
Le Fri, 27 Apr 2007 12:00:14 +0200, Frédéric LAMBOUR
a écrit:

Hello,

C'est tout a fait possible puisque je l'ai fait il y a quelques années
(j'ai
perdu le code malheureusement). Je me souvient que c'était très simple
mais
pas du code :-(

C'est pour consommer un service web qui fonctionne en ("ISO-8859-1" pour
lui
passer un paramètre de type string

"Gilles TOURREAU" a écrit dans le message de
news:

Le Thu, 26 Apr 2007 18:14:25 +0200, Frédéric LAMBOUR
a écrit:

Bonjour,

Help help help j'en suis la : Encoding oEncoder = new
Encoding.GetEncoding("ISO-8859-1");
pour le reste je sèche.

Merci de votre aide





Les chaines de caractères sous .NET sont toujours en Unicode...

Les classes Encoding servent uniquement à récuperer/écrire des données
dans un autre format provenant d'une source extérieure tel que les
fichiers, les sockets,...etc pour mettre en mémoire des chaines de
caractères .NET Unicode...

Pourrais-tu préciser pourquoi tu as besoin de convertir une chaine de
caractère en ISO ?

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr







Bonjour,

Avez vous essayer de changer la propriété "RequestEncoding" du proxy
généré par VS2005 ?

Il existe une solution (plustôt un "bidouillage") pour convertir un string
en une autre string .NET en utilisant les MemoryStream. Utiliser un tel
principe c'est aller droit dans le mur dans la gestion des chaînes de
caractère. Toutes les chaines de caractères en .NET sont (et doivent être
en Unicode).
C'est au moment où vous souhaitez transférer une chaîne .NET (en unicode)
dans un flux d'octets (fichier, XML, socket,...etc) que vous devez
spécifier dans quel encodage vous souhaitez l'enregistrer (et
reciproquement pour le chargement).

Vous pouvez remarquer qu'il n'exite pas de méthode : "string
GetString(string)" dans la classe Encoding. Cela vient du fait qu'il n'y a
pas de convertion d'encodage de chaîne à chaîne à faire sous .NET car tout
est en Unicode.

En revanche il y a des méthodes permettant de convertir du string en
tableau d'octet "byte[]" (et inversement). Lorsque .NET lit un fichier par
exemple, il lit des octets mais ne sait pas les interpreter, vous devez
donc spécifier quel encodage il doit utiliser pour lire ces octets.
Automatiquement, .NET va prendre des octets les convertir en Unicode et
les mettre dans un String.

Voici un exemple concret de ce qui se passe et pourquoi il ne faut pas
s'amuser à convertir les chaines de caractères en un autre format (Les
valeurs des caractères sont complètement arbitraire car je ne l'ai connais
pas) :

Supposons une table de valeur des caractères suivantes :
Lettre ISO-8859-1 Unicode

'A' 10 20
'B' 15 10
'C' 50 15

Vous souhaitez envoyer "AB" dans un WebService qui utilise du ISO-8859-1
en utilisant votre solution :
1/Vous créer une chaine de caractère "en dur" (donc en Unicode) :
string s = "AB" //Qui correspond à [20][10];
2/Vous convertissez par une méthode cette chaine en ISO-8859-1 :
string e = Convertir(s); //Vous obtenez une chaine "BC" sous Unicode
[10][15] qui correspond à "AB" en ISO [10][15].
3/Vous avez 2 choix pour envoyer cette chaine sur un WebService (via la
propriété RequestEncoding) :
- Soit avec l'encodage par défaut UTF-8
- Soit avec l'encodage ISO-8859-1

Vous vous dites comme mon WebService est en ISO, il faut spécifier ISO !
Vous transmettez alors la chaine au proxy .NET. Etant donné que toutes les
strings sont en Unicode, .NET considère "BC" [10][15] comme du Unicode, il
va donc envoyer au WebService la convertion de "BC" en ISO qui est
[15][50]... Arrivé dans le WebService on reçoit [15][50] et le WebService
considère cela comme de l'ISO, donc "BC". La chaine envoyé est donc erroné
!
Maintenant si on envoie avec l'encodage UTF-8 :
Vous transmettez alors la chaine au proxy .NET. Etant donné que toutes les
strings sont en Unicode, .NET considère "BC" [10][15] comme du Unicode, il
ne va donc rien faire et envoyer directement la chaine au WebService.
Arrivé dans le WebService on reçoit [10][15] et le WebService considère
cela comme de l'ISO, donc "AB". La chaine est donc correct !

La 2ème méthode fonctionne, mais est très abérante :

Proxy p = new....();
s = "AB";
c = Convertir(s); //Convertir en ISO
p.RequestEncoding = "UTF-8" //Mettre UTF-8 pour communiquer avec un
WebService en ISO ?????????

Un tel code peu porter à confusion lors de la maintenance...

Si maintenant vous enlever la méthode de convertion et spécifiez ISO comme
encodage dans RequestEncoding :
Vous transmettez alors la chaine au proxy .NET "AB" [20][10]. Etant donné
que toutes les strings sont en Unicode, .NET considère "AB" [20][10] comme
du Unicode, il va donc envoyer au WebService la convertion de "AB" en ISO
qui est [10][15]... Arrivé dans le WebService on reçoit [10][15] et le
WebService considère cela comme de l'ISO, donc "AB". BILAN : La chaine a
été correctement envoyé !

Tout çà pour vous dire qu'il ne faut jamais convertir (même s'il existe
des sources sur Internet permettant de réaliser cela) une chaine .NET !
Rappelez vous de schéma :

Flux d'octets entrée -> Convertion -> string .NET -> Convertion -> Flux
d'octets de sortie.

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Frédéric LAMBOUR
Hello,

Avez vous essayer de changer la propriété "RequestEncoding" du proxy
généré par VS2005 ?





Non je vais essayer merci

"Gilles TOURREAU" a écrit dans le message de news:

Le Fri, 27 Apr 2007 12:00:14 +0200, Frédéric LAMBOUR
a écrit:

Hello,

C'est tout a fait possible puisque je l'ai fait il y a quelques années
(j'ai
perdu le code malheureusement). Je me souvient que c'était très simple
mais
pas du code :-(

C'est pour consommer un service web qui fonctionne en ("ISO-8859-1" pour
lui
passer un paramètre de type string

"Gilles TOURREAU" a écrit dans le message de
news:

Le Thu, 26 Apr 2007 18:14:25 +0200, Frédéric LAMBOUR
a écrit:

Bonjour,

Help help help j'en suis la : Encoding oEncoder = new
Encoding.GetEncoding("ISO-8859-1");
pour le reste je sèche.

Merci de votre aide





Les chaines de caractères sous .NET sont toujours en Unicode...

Les classes Encoding servent uniquement à récuperer/écrire des données
dans un autre format provenant d'une source extérieure tel que les
fichiers, les sockets,...etc pour mettre en mémoire des chaines de
caractères .NET Unicode...

Pourrais-tu préciser pourquoi tu as besoin de convertir une chaine de
caractère en ISO ?

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr







Bonjour,

Avez vous essayer de changer la propriété "RequestEncoding" du proxy
généré par VS2005 ?

Il existe une solution (plustôt un "bidouillage") pour convertir un string
en une autre string .NET en utilisant les MemoryStream. Utiliser un tel
principe c'est aller droit dans le mur dans la gestion des chaînes de
caractère. Toutes les chaines de caractères en .NET sont (et doivent être
en Unicode).
C'est au moment où vous souhaitez transférer une chaîne .NET (en unicode)
dans un flux d'octets (fichier, XML, socket,...etc) que vous devez
spécifier dans quel encodage vous souhaitez l'enregistrer (et
reciproquement pour le chargement).

Vous pouvez remarquer qu'il n'exite pas de méthode : "string
GetString(string)" dans la classe Encoding. Cela vient du fait qu'il n'y a
pas de convertion d'encodage de chaîne à chaîne à faire sous .NET car tout
est en Unicode.

En revanche il y a des méthodes permettant de convertir du string en
tableau d'octet "byte[]" (et inversement). Lorsque .NET lit un fichier par
exemple, il lit des octets mais ne sait pas les interpreter, vous devez
donc spécifier quel encodage il doit utiliser pour lire ces octets.
Automatiquement, .NET va prendre des octets les convertir en Unicode et
les mettre dans un String.

Voici un exemple concret de ce qui se passe et pourquoi il ne faut pas
s'amuser à convertir les chaines de caractères en un autre format (Les
valeurs des caractères sont complètement arbitraire car je ne l'ai connais
pas) :

Supposons une table de valeur des caractères suivantes :
Lettre ISO-8859-1 Unicode

'A' 10 20
'B' 15 10
'C' 50 15

Vous souhaitez envoyer "AB" dans un WebService qui utilise du ISO-8859-1
en utilisant votre solution :
1/Vous créer une chaine de caractère "en dur" (donc en Unicode) :
string s = "AB" //Qui correspond à [20][10];
2/Vous convertissez par une méthode cette chaine en ISO-8859-1 :
string e = Convertir(s); //Vous obtenez une chaine "BC" sous Unicode
[10][15] qui correspond à "AB" en ISO [10][15].
3/Vous avez 2 choix pour envoyer cette chaine sur un WebService (via la
propriété RequestEncoding) :
- Soit avec l'encodage par défaut UTF-8
- Soit avec l'encodage ISO-8859-1

Vous vous dites comme mon WebService est en ISO, il faut spécifier ISO !
Vous transmettez alors la chaine au proxy .NET. Etant donné que toutes les
strings sont en Unicode, .NET considère "BC" [10][15] comme du Unicode, il
va donc envoyer au WebService la convertion de "BC" en ISO qui est
[15][50]... Arrivé dans le WebService on reçoit [15][50] et le WebService
considère cela comme de l'ISO, donc "BC". La chaine envoyé est donc erroné
!
Maintenant si on envoie avec l'encodage UTF-8 :
Vous transmettez alors la chaine au proxy .NET. Etant donné que toutes les
strings sont en Unicode, .NET considère "BC" [10][15] comme du Unicode, il
ne va donc rien faire et envoyer directement la chaine au WebService.
Arrivé dans le WebService on reçoit [10][15] et le WebService considère
cela comme de l'ISO, donc "AB". La chaine est donc correct !

La 2ème méthode fonctionne, mais est très abérante :

Proxy p = new....();
s = "AB";
c = Convertir(s); //Convertir en ISO
p.RequestEncoding = "UTF-8" //Mettre UTF-8 pour communiquer avec un
WebService en ISO ?????????

Un tel code peu porter à confusion lors de la maintenance...

Si maintenant vous enlever la méthode de convertion et spécifiez ISO comme
encodage dans RequestEncoding :
Vous transmettez alors la chaine au proxy .NET "AB" [20][10]. Etant donné
que toutes les strings sont en Unicode, .NET considère "AB" [20][10] comme
du Unicode, il va donc envoyer au WebService la convertion de "AB" en ISO
qui est [10][15]... Arrivé dans le WebService on reçoit [10][15] et le
WebService considère cela comme de l'ISO, donc "AB". BILAN : La chaine a
été correctement envoyé !

Tout çà pour vous dire qu'il ne faut jamais convertir (même s'il existe
des sources sur Internet permettant de réaliser cela) une chaine .NET !
Rappelez vous de schéma :

Flux d'octets entrée -> Convertion -> string .NET -> Convertion -> Flux
d'octets de sortie.

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr