C#: die Konvertierung der byte [], um die UTF8-kodierten string
Benutze ich eine Bibliothek namens EXIFextractor zum extrahieren von Metadaten aus Bildern Informationen. Diese lib-Teil ist mit System.Zeichnung.Imaging.PropertyItem zu tun, all die harte Arbeit. Einige der Daten im PropertyItem, wie z.B. Bilder, Details usw. abgerufen werden als ASCII-string, gespeichert in einem byte [], gemäß der Microsoft-Dokumentation.
Mein problem ist, dass internationale Sonderzeichen (å, ä, ö, usw.) gelöscht und ersetzt durch Fragezeichen. Wenn ich Debuggen des Codes ist es offensichtlich, dass das byte[] ist eine Darstellung einer UTF-8.
Möchte ich analysieren, die byte[] als UTF8-string, wie kann ich dies tun, ohne dabei irgendwelche Informationen in den Prozess ein?
Vielen Dank im Voraus!
Update:
Wurde ich gebeten, ein snippet aus meinem code:
Der erste Ausschnitt ist aus der Klasse, die ich verwenden, nämlich die EXIFextractor.cs geschrieben von Asim Goheer
foreach( System.Drawing.Imaging.PropertyItem p in parr )
{
string v = "";
//...
else if( p.Type == 0x2 )
{
//string
v = ascii.GetString(p.Value);
}
Und das ist mein code, wo ich versuche mein bestes zu behandeln, die Ergebnisse der oben genannten.
try {
EXIFextractor exif = new EXIFextractor(ref bmp, "");
object o;
if ((o = exif["Image Description"]) != null)
MediaFile.Description = Tools.UTF8Encode(o.ToString());
Habe ich auch versucht ein paar andere Wege, meine kostbare å, ä, ö, aus den Daten, aber nichts scheint den trick tun. Ich bin angefangen zu denken, Hans Passant ist Recht über seine Schlussfolgerungen in seiner Antwort weiter unten.
- Wenn die information gelesen wird, verwenden Sie die ASCII-Kodierung, werden alle nicht-ASCII-Zeichen nicht korrekt gelesen werden als eine Folge. Das Lesen von Zeichen mit einer Codierung und dann das schreiben in ein byte-array klingt nicht richtig. Können Sie einen link auf die Dokumentation, die besagt das der Fall?
- Hier ist es, wenn ich erlaubt werde, nach einer anderen hyperlink 🙂 msdn.microsoft.com/en-us/library/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die
GetString
Methode auf die- Kodierung.UTF8
Objekt.Ja, das ist ein problem mit der app oder der Kamera, entstand das Bild. Der EXIF-standard hat schreckliche Unterstützung für text, es werden codiert in ASCII. Das immer nur klappt, wenn der Fotograf spricht Englisch. Kein Zweifel, die software, die codiert das Bild ist zu ignorieren diese Anforderung. Das ist, was der Klasse PropertyItem ist so gut, es kodiert einen string zu byte[] mit dem Marschall.StringToHGlobalAnsi(), übernimmt das system die Standard-Codepage.
Gibt es keine offensichtliche Lösung für dieses Problem, Sie bekommen mojibake, Wann das Foto gemacht wurde, zu weit entfernt von Ihrem Computer.
Vielleicht könnten Sie versuchen, eine andere Codierung? Im UTF16-Unicode?
Wenn Sie nicht sicher sind, wenn es kodiert Recht in Erster Linie versuchen, zum anzeigen der exif-Metadaten mit einem anderen exif-reader.