[Mysql] Choix interclassement Windows

Choix interclassement Windows [Mysql] - SQL/NoSQL - Programmation

Marsh Posté le 14-11-2007 à 15:00:33    

Bonjour,
 
Je suis dans l'obligation de travailler sur un serveur 2003.
J'ai habituellement l'habitude de travailler sous unix (et dans ce cas, je ne poserais pas la question) mais le doute d'installe lorsque je travaille sous windows.
 
J'ai un projet qui doit utilisé une base de donnée Mysql.
Une partie de se projet sera une application C#, l'autre partie sera un webservice.
Il va y a voir un dialogue webservice (surement en PHP) vers la base donnée, webservice vers le logiciel C# et du logiciel C# vers la base de donnée.
Vu que tout ceci travaille sous windows, quel interclassement choisir pour ma base de donnée ?
Si je choisis UTF-8 est-ce que tout mes applis PHP et mon projet .NET en C# savent sans problème travaillé en UTF-8 ??
 
Merci

Reply

Marsh Posté le 14-11-2007 à 15:00:33   

Reply

Marsh Posté le 14-11-2007 à 17:46:00    

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 :
  1. byte[] ba = new byte[] {72, 101, 108, 108, 111};
  2. string s = Encoding.ASCII.GetString(ba);
  3. 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 :
  1. using System;
  2. using System.Text;
  3.  
  4. namespace TestConsole
  5. {
  6.    class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            const string MaString = "C'est bientôt les fêtes de Noël."; // Constante en Unicode
  11.  
  12.            Console.WriteLine(string.Format("Encoding utilisé : {0} ({1})", Console.OutputEncoding.EncodingName, Console.OutputEncoding.CodePage));
  13.            Console.WriteLine(MaString);
  14.            Console.WriteLine();
  15.  
  16.            byte[] MesBytes = Encoding.UTF8.GetBytes(MaString); // Convertion en array de bytes au format UTF-8
  17.            Console.WriteLine(Console.OutputEncoding.GetString(MesBytes)); // Erreur : on essaie de décoder en MS-DOS 850 les bytes codés en UTF-8
  18.            Console.WriteLine();
  19.  
  20.            Console.WriteLine(Encoding.UTF8.GetString(MesBytes)); // Relis les bytes au format UTF-8 et les envoie vers la console correctement
  21.  
  22.            Console.ReadKey(true);
  23.        }
  24.    }
  25. }


 


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
Reply

Marsh Posté le 14-11-2007 à 17:53:16    

PS : Le passage de Unicode à UTF-8 et vice versa est 100% compatible. La seule différence c'est que Unicode utilise systématiquement 2 bytes pour coder un caractère. Pour cette raison, le type char n'est absolument pas synonyme de byte en .NET. Il n'existe d'ailleurs pas à ma connaissance de méthode permettant de connaître la valeur numérique d'un char.

Reply

Marsh Posté le 15-11-2007 à 09:17:03    

Merci !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed