1175 Stimmen

Wie konvertiert man UTF-8 byte[] in string

J'ai un byte[] Array, das aus einer Datei geladen wird, von der ich zufällig weiß, dass sie UTF-8 .

In einigen Debugging-Codes muss ich sie in eine Zeichenkette umwandeln. Gibt es einen Einzeiler, der dies tut?

Unter der Haube sollte es nur eine Zuweisung und eine memcopy Auch wenn es nicht umgesetzt wird, sollte es also möglich sein.

7 Stimmen

"sollte nur eine Zuweisung und eine Speicherkopie sein": ist nicht korrekt, da eine .NET-Zeichenkette UTF-16 kodiert ist. Ein Unicode-Zeichen kann eine UTF-8-Code-Einheit oder eine UTF-16-Code-Einheit sein. Ein anderes kann zwei UTF-8-Code-Einheiten oder eine UTF-16-Code-Einheit sein, ein anderes kann drei UTF-8-Code-Einheiten oder eine UTF-16-Code-Einheit sein, ein anderes kann vier UTF-8-Code-Einheiten oder zwei UTF-16-Code-Einheiten sein. Eine Memkopie könnte zwar erweitert werden, aber sie wäre nicht in der Lage, die Konvertierung von UTF-8 nach UTF-16 zu bewältigen.

9voto

AndrewJE Punkte 838

Konvertierung einer byte[] zu einer string scheint einfach zu sein, aber jede Art von Kodierung wird wahrscheinlich die Ausgabezeichenfolge durcheinander bringen. Diese kleine Funktion funktioniert einfach ohne unerwartete Ergebnisse:

private string ToString(byte[] bytes)
{
    string response = string.Empty;

    foreach (byte b in bytes)
        response += (Char)b;

    return response;
}

0 Stimmen

Ich habe System.For

0 Stimmen

@ AndrewJE dies wird

7voto

metadings Punkte 3728

Verwendung von (byte)b.ToString("x2") Ausgänge 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;
    }

}

5voto

Sagar Punkte 444

El BitConverter Klasse kann verwendet werden, um eine byte[] a string .

var convertedString = BitConverter.ToString(byteAttay);

Dokumentation von BitConverter Klasse kann man auf MSDN .

3 Stimmen

Dies konvertiert das Byte-Array Wie konvertiert man Byte .

1 Stimmen

Nicht was OP fragte

4voto

P.K. Punkte 1735

Es gibt auch die Klasse UnicodeEncoding, die recht einfach in der Anwendung ist:

ByteConverter = new UnicodeEncoding();
string stringDataForEncoding = "My Secret Data!";
byte[] dataEncoded = ByteConverter.GetBytes(stringDataForEncoding);

Console.WriteLine("Data after decoding: {0}", ByteConverter.GetString(dataEncoded));

0 Stimmen

Aber nicht UTF-8, denke ich?

2 Stimmen

UnicodeEncoding ist der schlechteste Kl

4voto

The One Punkte 4223

Wenn Sie .NET 3.5 oder .NET 3.5 CE verwenden, müssen Sie zusätzlich zur gewählten Antwort den Index des ersten zu dekodierenden Bytes und die Anzahl der zu dekodierenden Bytes angeben:

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

0 Stimmen

Das gibt mir Diamanten Convert.ToBase64String

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X