How to convert UTF-8 byte[] to string How to convert UTF-8 byte[] to string arrays arrays

How to convert UTF-8 byte[] to string


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


There're at least four different ways doing this conversion.

  1. Encoding's GetString
    , but you won't be able to get the original bytes back if those bytes have non-ASCII characters.

  2. BitConverter.ToString
    The output is a "-" delimited string, but there's no .NET built-in method to convert the string back to byte array.

  3. Convert.ToBase64String
    You can easily convert the output string back to byte array by using Convert.FromBase64String.
    Note: The output string could contain '+', '/' and '='. If you want to use the string in a URL, you need to explicitly encode it.

  4. HttpServerUtility.UrlTokenEncode
    You can easily convert the output string back to byte array by using HttpServerUtility.UrlTokenDecode. The output string is already URL friendly! The downside is it needs System.Web assembly if your project is not a web project.

A full example:

byte[] bytes = { 130, 200, 234, 23 }; // A byte array contains non-ASCII (or non-readable) charactersstring 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 resultsstring s2 = BitConverter.ToString(bytes);   // 82-C8-EA-17String[] 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 bytesstring s3 = Convert.ToBase64String(bytes);  // gsjqFw==byte[] decByte3 = Convert.FromBase64String(s3);// decByte3 same as bytesstring s4 = HttpServerUtility.UrlTokenEncode(bytes);    // gsjqFw2byte[] decBytes4 = HttpServerUtility.UrlTokenDecode(s4);// decBytes4 same as bytes


A general solution to convert from byte array to string when you don't know the encoding:

static string BytesToStringConverted(byte[] bytes){    using (var stream = new MemoryStream(bytes))    {        using (var streamReader = new StreamReader(stream))        {            return streamReader.ReadToEnd();        }    }}