So konvertieren Sie einen UTF-8-string in Unicode?

Habe ich Zeichenfolge, die zeigt UTF-8-codierte Zeichen, und ich möchte Sie zu konvertieren zurück zu Unicode.

Für heute, meine Umsetzung ist die folgende:

public static string DecodeFromUtf8(this string utf8String)
{
    //read the string as UTF-8 bytes.
    byte[] encodedBytes = Encoding.UTF8.GetBytes(utf8String);

    //convert them into unicode bytes.
    byte[] unicodeBytes = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, encodedBytes);

    //builds the converted string.
    return Encoding.Unicode.GetString(encodedBytes);
}

Spiele ich mit dem Wort "déjà". Ich habe konvertiert in UTF-8 durch dieses online-tool, und so begann ich zu testen, meine Methode mit der string "déjÃ".

Leider, mit dieser Umsetzung der saite gleich bleibt.

Wo bin ich falsch?

  • Das ist nicht utf-8-string. Das ist eine beschädigte Zeichenfolge, die wurde schlecht konvertiert die bytes mit der falschen Codierung.
  • UTF-8 ist Unicode.
  • Die Quell-Zeichenfolge ungültig ist UTF-8.
  • C# - strings 16-bit-Zeichen, also können Sie Sie möglicherweise nicht in UTF-8 codiert. Ich denke, dass das system nicht verstehen, was Sie zu tun versuchen. Wo bekommt man die miscoded strings aus?
  • Die Funktion muss akzeptieren byte[] in den ersten Platz, nicht string.
  • und richard: Wenn es hilft, Lesen Sie "UTF-16" ist für "Unicode" in der Frage. C#'s native string-Kodierung ist UTF-16, und es wird als Unicode in die docs.
  • Oh, wir haben also einen Fall von verwirrenden Terminologie.
  • Da diese web-Seite ist in utf-8 ich freue mich auf die utf-8 für déjà und es sieht aus wie déjÃ.
  • können Sie das konkretisieren, bitte? Wie können Sie sehen, meine UTF-8-string ist beschädigt? (Auch, ich aktualisierte meine Frage, um zu zeigen, wo ich es bekommen).
  • Sie könnte beginnen mit Was Jeder Programmierer Absolut Positiv Muss Wissen Über Kodierungen Und Zeichensätzen Arbeiten Mit Text um zu verstehen, was Sie zu tun versuchen...
  • C# - strings 16-bit - code-Einheiten. Unicode-Zeichen sind 21 bits, natürlich.
  • Wieder verwirrende Terminologie. Die Grundeinheit einer Zeichenkette wird als eine char in C# (oder ein Char im .NET lingo) und Sie sind 16 bit. Aber es gibt keine solche Sache wie eine 21-bit-Unicode-Zeichen. Zumindest der Satz "der 21-bit-Zeichen" nicht erscheint überall auf der Unicode-Website, und keine Umsetzung in der Welt hat die 21 bits. (Übrigens habe ich vorgeschlagen, eine 24-bit-Codierung, die einmal (UTF-24), aber das wurde abgelehnt.)
  • utf unicode ?????? utf-8 ist eine Möglichkeit zum speichern von unicode-code-points

InformationsquelleAutor remio | 2012-07-02
Schreibe einen Kommentar