<p><strong>Contrairement aux réponses ici, vous n’avez PAS besoin de vous soucier de l’encodage <em>si</em></strong> les octets n’ont pas besoin d’être interprétés !</p>
<p>Comme vous l’avez mentionné, votre objectif est simplement d’<em>« obtenir les octets dans lesquels la chaîne a été stockée »</em>.</p>
<p>(Et, bien sûr, de pouvoir reconstruire la chaîne à partir des octets.)</p>
<p><strong>Pour ces objectifs, je ne comprends honnêtement <em>pas</em> pourquoi les gens continuent à vous dire que vous avez besoin des encodages. Vous n’avez certainement PAS besoin de vous soucier des encodages pour cela.</strong></p>
<p>Faites simplement ceci à la place :</p>
<pre><code class="lang-auto">static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
// Do NOT use on arbitrary bytes; only use on GetBytes's output on the SAME system
static string GetString(byte[] bytes)
{
char[] chars = new char[bytes.Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
return new string(chars);
}
</code></pre>
<p>Tant que votre programme (ou d’autres programmes) n’essaie pas d’<em>interpréter</em> les octets d’une manière ou d’une autre, ce que vous n’avez évidemment pas mentionné vouloir faire, il n’y a <strong>rien</strong> de mal avec cette approche ! Se soucier des encodages ne fait que compliquer votre vie sans raison réelle.</p>
<p><strong>Avantage supplémentaire de cette approche : Peu importe si la chaîne contient des caractères invalides, car vous pouvez toujours obtenir les données et reconstruire la chaîne d’origine de toute façon !</strong></p>
<p>Elle sera encodée et décodée de la même manière, parce que vous <em>ne faites que regarder les octets</em>.</p>
<p>Si vous aviez utilisé un encodage spécifique, cela vous aurait posé des problèmes avec l’encodage/décodage de caractères invalides.</p>