C# : convertir une chaîne (string) en byte sans spécifier manuellement un encodage

Avec le langage C# , il est possible de se passer de l'encodage pour transformer une chaîne de caractères en bytes.

Les chaînes de caractères sont associées en informatique à des encodages. L'encodage permet de lire les données représentant une chaîne de caractères et de l'afficher correctement. Il est cependant possible de se passer de l'encodage pour transformer une chaîne de caractères avec le langage C# en bytes.

Se passer d'encodage est uniquement possible dans le cas où vous n'interprétez pas les données, c'est-à-dire que vous ne les utilisez pas dans votre application pour un autre usage que celui de transformer la chaîne de caractères en bytes ou l'opération inverse. Pour effectuer la transformation d'une chaîne de caractères vers les bytes, il faut créer un tableau de bytes correspondant au nombre de caractères contenus dans la chaîne multiplié par la taille d'un caractère. La méthode Blockcopy() de la classe System.Buffer effectue la transformation d'un tableau de caractères vers un tableau de bytes. Il faut donc avoir converti la chaîne en tableau de caractères avec la méthode toCharArray().

// Cette méthode transforme une chaîne de caractère en bytes
static byte[] transformeEnBytes(string maChaine)
{
 byte[] bytes = new byte[maChaine.Length * sizeof(char)];
 System.Buffer.BlockCopy(maChaine.ToCharArray(), 0, bytes, 0, bytes.Length);
 return bytes;
}

Pour effectuer l'opération inverse, il faut créer une chaîne avec comme longueur le nombre de bytes divisé par la taille d'un caractère puis utiliser la même méthode en intervertissant les arguments. Une fois le tableau de caractères obtenu, il suffit d'instancier la chaîne avec le tableau en argument.

static string transformeEnString(byte[] bytes)
{
 char[] caracteres = new char[bytes.Length / sizeof(char)];
 System.Buffer.BlockCopy(bytes, 0, caracteres, 0, bytes.Length);
 return new string(caracteres);
}

Dans la plupart des cas, il est impératif de connaître l'encodage. De plus, chaque classe gérant un encodage fournit des méthodes pour effectuer facilement la conversion. La méthode pour transformer une chaîne de caractères en tableau de bytes se nomme GetBytes() et la méthode pour effectuer l'opération inverse s'appelle GetString()

// Pour l'encodage UTF-8
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(maChaine);
string maChaine = System.Text.Encoding.UTF8.GetString(bytes);
// Pour l'encodage ASCII
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(maChaine);
string maChaine = System.Text.Encoding.UTF8.GetString(bytes);