416 votos

¿Cómo convertir un byte[] UTF-8 en una cadena?

Tengo un byte[] Array que se carga desde un archivo que casualmente sé que contiene UTF-8 .

En un código de depuración, necesito convertirlo en una cadena. ¿Existe una línea que haga esto?

Debajo de las sábanas debería ser sólo una asignación y un memoria Así que, aunque no se implemente, debería ser posible.

727voto

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

148voto

detale Puntos 2047

Hay al menos cuatro formas diferentes de hacer esta conversión.

  1. GetString de Encoding
    , pero no podrás recuperar los bytes originales si esos bytes tienen caracteres no ASCII.

  2. BitConverter.ToString
    La salida es una cadena delimitada por "-", pero no hay ningún método incorporado en .NET para convertir la cadena de nuevo en un Array de bytes.

  3. Convert.ToBase64String
    Puedes convertir fácilmente la cadena de salida en un Array de bytes utilizando Convert.FromBase64String .
    Nota: La cadena de salida puede contener '+', '/' y '='. Si desea utilizar la cadena en una URL, debe codificarla explícitamente.

  4. HttpServerUtility.UrlTokenEncode
    Puedes convertir fácilmente la cadena de salida en un Array de bytes utilizando HttpServerUtility.UrlTokenDecode . La cadena de salida ya es amigable con la URL. El inconveniente es que necesita System.Web si su proyecto no es un proyecto web.

Un ejemplo completo:

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 UTF-8 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 Puntos 14117
string str = System.Text.Encoding.UTF8.GetString( arr );

11voto

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

9voto

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X