Avatar ·

Comment obtenir une représentation en octets uniforme d'une chaîne en C# sans spécifier manuellement l'encodage ?

Bonjour à tous ! Je suis débutant en C# et j'ai rencontré un problème qui m'a intrigué. Je dois transmettre des chaînes sur le réseau et les hacher, mais j'ai remarqué que lorsque je convertis une chaîne en tableau d'octets, le résultat peut différer sur différents ordinateurs.

Voici un exemple de mon code :

string message = "Привет, мир!";
byte[] bytes = Encoding.Default.GetBytes(message);
// J'envoie bytes sur le réseau ou je calcule le hash

Le problème est que Encoding.Default donne des résultats différents selon la locale système. Sur mon Windows avec locale russe, cela fonctionne, mais sur un serveur avec locale anglaise, non. J'ai lu que Encoding.ASCII perd des caractères, et que Encoding.Unicode ajoute un BOM (Byte Order Mark) qui gâche tout.

J'ai besoin d'une solution qui fonctionne de la même manière sur n'importe quelle plateforme (Windows, Linux, Mac) et qui ne m'oblige pas à spécifier manuellement l'encodage à chaque fois. Comment convertir correctement une chaîne en octets en C# sans spécifier l'encodage ?