[C#] UTF-8バイト[]を文字列に変換するには?


Answers

この変換には少なくとも4つの異なる方法があります。

  1. EncodingのGetString
    これらのバイトにASCII以外の文字が含まれていると元のバイトを戻すことはできません。

  2. BitConverter.ToString
    出力は " - "で区切られた文字列ですが、文字列をバイト配列に変換するための.NET組み込みメソッドはありません。

  3. Convert.ToBase64String
    Convert.FromBase64Stringを使用すると、出力文字列をバイト配列に簡単に変換できます。
    注:出力文字列には '+'、 '/'、 '='を含めることができます。 URLで文字列を使用する場合は、明示的にエンコードする必要があります。

  4. HttpServerUtility.UrlTokenEncode
    HttpServerUtility.UrlTokenDecodeを使用すると、出力文字列を簡単にバイト配列に変換できます。 出力文字列はすでにURLフレンドリです! プロジェクトがWebプロジェクトでない場合、 System.Webアセンブリが必要です。

完全な例:

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
Question

私は知っている起こるファイルから読み込まれているbyte[]配列をUTF-8が含まれています。 いくつかのデバッグコードでは、文字列に変換する必要があります。 これを行うライナーは1つありますか?

カバーの下では、割り当てとmemcopyだけなので、実装されていなくても可能です。




(byte)b.ToString("x2") 、出力b4b5dfe475e58b67

public static class Ext {

    public static string ToHexString(this byte[] hex)
    {
        if (hex == null) return null;
        if (hex.Length == 0) return string.Empty;

        var s = new StringBuilder();
        foreach (byte b in hex) {
            s.Append(b.ToString("x2"));
        }
        return s.ToString();
    }

    public static byte[] ToHexBytes(this string hex)
    {
        if (hex == null) return null;
        if (hex.Length == 0) return new byte[0];

        int l = hex.Length / 2;
        var b = new byte[l];
        for (int i = 0; i < l; ++i) {
            b[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
        }
        return b;
    }

    public static bool EqualsTo(this byte[] bytes, byte[] bytesToCompare)
    {
        if (bytes == null && bytesToCompare == null) return true; // ?
        if (bytes == null || bytesToCompare == null) return false;
        if (object.ReferenceEquals(bytes, bytesToCompare)) return true;

        if (bytes.Length != bytesToCompare.Length) return false;

        for (int i = 0; i < bytes.Length; ++i) {
            if (bytes[i] != bytesToCompare[i]) return false;
        }
        return true;
    }

}



BitConverterクラスを使用すると、 byte[]stringに変換できstring

var convertedString = BitConverter.ToString(byteAttay);

BitConverterクラスのドキュメントは、 MSDN fountにすることができます




これを試して:

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



あるいは:

 var byteStr = Convert.ToBase64String(bytes);



定義:

public static string ConvertByteToString(this byte[] source)
{
    return source != null ? System.Text.Encoding.UTF8.GetString(source) : null;
}

使用方法:

string result = input.ConvertByteToString();



Links