1/ Je te déconseille d'utiliser PHP pour le WebService. En effet, .NET permet d'instancier sous forme d'un objet local un WebService écrit en .NET. Avec les autres langages, je pense que tu risques de devoir patouiller un moment avant de trouver comment reproduire ce comportement.
2/ Tu n'as pas à te soucier de la représentation en mémoire du type String dans le programme .NET. T'as juste à savoir l'interfacer correctement lorsque tu communique avec un outils externe.
=> Via un WebService, tu auras une clause dans ton flux XML indiquant quel charset est utilisé pour transporter les données : .NET va décoder ce charset pour utiliser sa propre représentation ensuite. Idem pour la réponse, .NET va adapter sa réponse à l'encodage attendu.
Enfin, pour lire une chaîne dont l'encoding est connu, mais dont .NET n'est pas capable de déterminer le type automatiquement (un fichier texte par exemple), alors tu as cette solution :
Code :
byte[] ba = new byte[] {72, 101, 108, 108, 111}; string s = Encoding.ASCII.GetString(ba); Console.WriteLine(s);
|
Et sa réciproque, avec GetBytes (génère un array de bytes à partir d'un string, en utilisant l'encoding désiré)
Exemple simple :
Code :
using System; using System.Text; namespace TestConsole { class Program { static void Main(string[] args) { const string MaString = "C'est bientôt les fêtes de Noël."; // Constante en Unicode Console.WriteLine(string.Format("Encoding utilisé : {0} ({1})", Console.OutputEncoding.EncodingName, Console.OutputEncoding.CodePage)); Console.WriteLine(MaString); Console.WriteLine(); byte[] MesBytes = Encoding.UTF8.GetBytes(MaString); // Convertion en array de bytes au format UTF-8 Console.WriteLine(Console.OutputEncoding.GetString(MesBytes)); // Erreur : on essaie de décoder en MS-DOS 850 les bytes codés en UTF-8 Console.WriteLine(); Console.WriteLine(Encoding.UTF8.GetString(MesBytes)); // Relis les bytes au format UTF-8 et les envoie vers la console correctement Console.ReadKey(true); } } }
|
Encoding utilisé : Europe de l'Ouest (DOS) (850)
C'est bientôt les fêtes de Noël.
C'est bientôt les fêtes de Noël.
C'est bientôt les fêtes de Noël.
|
En gros, l'encoding des strings en mémoire est systématiquement Unicode (mais ça pourraît être n'importe quoi d'autre, tu t'en cognes).
Si tu n'utilises pas des classes capable de reconnaître l'encodage utilisé automatiquement, tu dois le faire toi-même.
La classe TextWriter et TextReader, qui sont les seules à manipuler directement des streams de type string, ont un paramètre d'encodage au même titre que Console.
Bref, t'as pas de question à te poser, ça marche tout seul.
Message édité par MagicBuzz le 14-11-2007 à 17:46:39