973 votes

Conversion de byte [] en chaîne en C #

J'ai un .NET byte[] qui est chargé à partir d'un fichier que je connais connu contient UTF-8 . Dans un code de débogage, j'ai besoin de le convertir en une chaîne. Y a-t-il un seul paquebot qui va le faire?

Sous les couvertures, il devrait s'agir simplement d'une allocation et d'un memcopy , donc même si ce n'est pas le cas, cela devrait être possible.

1532voto

Zanoni Points 8401
string result = System.Text.Encoding.UTF8.GetString(byteArray)

335voto

detale Points 2047

Il y a au moins 4 façons différentes de faire cette conversion.

  1. L'encodage est GetString
    mais vous ne serez pas en mesure d'obtenir l'original octets de retour si ces octets qui ont des caractères non-ASCII.

  2. BitConverter.ToString
    La sortie est un "-" délimitée par la chaîne, mais il n'y a pas .NET intégré dans la méthode pour convertir la chaîne vers le tableau d'octets.

  3. Convertir des.ToBase64String
    Vous pouvez facilement convertir la sortie de la chaîne de retour au tableau d'octets en utilisant Convertir.FromBase64String.
    Remarque: La chaîne de sortie peut contenir des '+', '/' et '='. Si vous souhaitez utiliser la chaîne de caractères dans une url, vous devez explicitement l'encoder.

  4. HttpServerUtility.UrlTokenEncode
    Vous pouvez facilement convertir la sortie de la chaîne de retour au tableau d'octets en utilisant HttpServerUtility.UrlTokenDecode. La chaîne de sortie est déjà url de l'environnement! L'inconvénient est qu'il besoins du Système.Web de l'assemblée si votre projet n'est pas un projet web.

Un exemple complet:

byte[] bytes = { 130, 200, 234, 23 }; // a byte array contains non-ASCII (or non-readable) characters

string s1 = Encoding.UTF8.GetString(bytes); // ���
byte[] decBytes1 = Encoding.UTF8.GetBytes(s1);  // decBytes1.Length == 10 !!
// decBytes1 not same as bytes
// using UTF8 or other Encoding object will get similar results

string s2 = BitConverter.ToString(bytes);   // 82-C8-EA-17
String[] tempAry = s2.Split('-');
byte[] decBytes2 = new byte[tempAry.Length];
for (int i = 0; i < tempAry.Length; i++)
    decBytes2[i] = Convert.ToByte(tempAry[i], 16);
// decBytes2 same as bytes

string s3 = Convert.ToBase64String(bytes);  // gsjqFw==
byte[] decByte3 = Convert.FromBase64String(s3);
// decByte3 same as bytes

string s4 = HttpServerUtility.UrlTokenEncode(bytes);    // gsjqFw2
byte[] decBytes4 = HttpServerUtility.UrlTokenDecode(s4);
// decBytes4 same as bytes

19voto

Timbo Points 14117
string str = System.Text.Encoding.UTF8.GetString( arr );

11voto

z-boss Points 4033
byte[] b = new byte[100];
string s = System.Text.UTF8Encoding.UTF8.GetString(b);

9voto

Daniel Brückner Points 36242
String text = System.Text.Encoding.UTF8.GetString(bytes);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X