C #: Konvertieren von Byte [] in UTF8-codierte Zeichenfolge

8

Ich verwende eine Bibliothek namens EXIFextractor , um Metadateninformationen aus Bildern zu extrahieren. Diese Bibliothek verwendet teilweise System.Drawing.Imaging.PropertyItem , um all die harte Arbeit zu erledigen. Einige der Daten in PropertyItem, wie z. B. Bilddetails usw., werden gemäß der Microsoft-Dokumentation als ASCII-Zeichenfolge abgerufen, die in einem Byte [] gespeichert ist.

Mein Problem ist, dass internationale Zeichen (å, ä, ö, usw.) fallengelassen und durch Fragezeichen ersetzt werden. Wenn ich den Code debugge, ist es offensichtlich, dass das Byte [] eine Darstellung eines UTF-8 ist.

Ich möchte das Byte [] als UTF8-String analysieren, wie kann ich das tun, ohne dabei irgendwelche Informationen zu verlieren?

Vielen Dank im Voraus!

Aktualisierung:

Ich wurde gebeten, ein Schnipsel aus meinem Code zu erstellen:

Das erste Snippet stammt von der Klasse, die ich verwende, nämlich die EXIFextractor.cs von Asim Goheer

%Vor%

Und das ist mein Code, wo ich mein Bestes versuche, die Ergebnisse der oben genannten zu behandeln.

%Vor%

Ich habe auch ein paar andere Methoden ausprobiert, um meine wertvollen å, ä, ö aus den Daten zu bekommen, aber nichts scheint den Trick zu machen. Ich beginne zu glauben, dass Hans Passant in seiner Antwort unten recht hat.

    
dotmartin 04.08.2010, 13:50
quelle

4 Antworten

32
%Vor%     
Scoregraphic 04.08.2010, 13:53
quelle
4

Verwenden Sie die GetString -Methode für die Encoding.UTF8 Objekt.

    
Tim Robinson 04.08.2010 13:53
quelle
2

Ja, das ist ein Problem mit der App oder Kamera, von der das Bild stammt. Der EXIF-Standard hat schreckliche Unterstützung für Text, er muss in ASCII kodiert sein. Das klappt nur gut wenn der Fotograf Englisch spricht. Kein Zweifel, die Software, die das Bild codiert, ignoriert diese Anforderung. Was auch die PropertyItem-Klasse tut, sie codiert eine Zeichenfolge in Byte [] mit Marshal.StringToHGlobalAnsi (), die die Standard-Codepage des Systems annimmt.

Es gibt keine offensichtliche Lösung dafür. Sie werden Mojibake bekommen, wenn das Foto zu weit von Ihrem Computer entfernt wurde.

    
Hans Passant 04.08.2010 15:10
quelle
1

Vielleicht könnten Sie eine andere Kodierung versuchen? UTF16, Unicode? Wenn Sie nicht sicher sind, ob es überhaupt richtig codiert wurde, versuchen Sie, die Exif-Metadaten mit einem anderen Exif-Reader anzuzeigen.

    
codymanix 04.08.2010 14:44
quelle

Tags und Links