Benutzer mit den meisten Antworten
vCard-Datei lesen

Frage
-
Hallo,
ich habe auf meinem Smartphone eine vCard-Datei mit allen Kontakten erstellt. Nun versuche ich ein Programm zu schreiben, das mir den Inhalt der Datei anzeigt. Ich habe allerdings Probleme mit der Darstellung der Umlaute. Hier ist der Ausschnitt der vcf-Datei:
BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=4E=6F=74=72=75=66;=42=65=68=C3=B6=72=64=65=6E;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=42=65=68=C3=B6=72=64=65=6E=20=4E=6F=74=72=75=66 TEL;WORK:115 END:VCARD BEGIN:VCARD VERSION:2.1 N:Notruf;Feuerwehr;;; FN:Feuerwehr Notruf TEL;WORK:112 END:VCARD BEGIN:VCARD VERSION:2.1 N:Notruf;Polizei;;; FN:Polizei Notruf TEL;WORK:110 END:VCARD
Ich habe es mit dieser Library probiert
https://github.com/mixerp/MixERP.Net.VCards
und unter Verwendung folgenden Codes
Dim vCardOpenFileDialog As New OpenFileDialog With { .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments, .Filter = "vCard-Dateien|*.vcf", .DefaultExt = "vcf", .CheckFileExists = True, .CheckPathExists = True } If vCardOpenFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then Dim contents As String = File.ReadAllText(vCardOpenFileDialog.FileName, Encoding.UTF8) Dim vcards As IEnumerable(Of VCard) = Deserializer.GetVCards(contents) VcardListBox.DisplayMember = "FormattedName" VcardListBox.DataSource = vcards End If
erhalte ich folgende Ausgabe:
Eigentlich sollte in der ersten Zeile Behörden Notruf stehen. Tut es aber aus mir unerklärlichen Gründen nicht. Dabei sollte die Library mit der UTF-8 Kodierung klar kommen. Also habe ich mich auf die Suche nach einer anderen Library gemacht und habe diese gefunden:
https://github.com/EWSoftware/PDI
Gleiches Spiel von vorne mit diesem Code:
Dim vCardOpenFileDialog As New OpenFileDialog With { .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments, .Filter = "vCard-Dateien|*.vcf", .DefaultExt = "vcf", .CheckFileExists = True, .CheckPathExists = True } If vCardOpenFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then PDIParser.DefaultEncoding = Encoding.GetEncoding("utf-8") BaseProperty.DefaultEncoding = Encoding.GetEncoding("utf-8") Dim vcardp As New VCardParser vcardp.ParseFile(vCardOpenFileDialog.FileName) VcardListBox.DisplayMember = "FormattedName" VcardListBox.DataSource = vcardp.VCards End If
Das Ergebnis sieht schon besser aus, obgleich die Umlaute nicht richtig dargestellt werden:
Hat jemand eine Idee, woran es liegt und wie ich das Problemlösen könnte?
Gruß,
LBB
Antworten
-
Hallo,
wenn die Library das machen "sollte", dann gibt es zwei Möglichkeiten:
- Du verwendest die Library falsch
- Die Library macht nicht was sie sollte
Zu 1. müsste die Dokumentation der Library Aufschluss geben.
Zu 2. kannst Du den entsprechenden Code Teil aus der Library testen, da dir der Quelltext vorliegt. Mit dem Debugger (oder durch gezieltes Ansehen des Quelltext) solltest Du herausfinden können, ob der genannte Quelltext Teil überhaupt verwendet wird und ob dieser zu einem richtigen Ergebnis führen kann.
- Gruß Florian
- Bearbeitet Florian Haupt Donnerstag, 1. März 2018 08:51 Format
- Als Antwort markiert LittleBlueBird Samstag, 3. März 2018 17:11
Alle Antworten
-
Du musst das Quoted Printable dekodieren:
How to decode quoted-printable encoded string- Gruß Florian
-
Hallo Florian,
danke für die Antwort. Allerdings sollte die Library von EWSoftware das bereits machen. Ich habe mir mal den Quellcode angeschaut und da ist etwas von Quoted-Printable die Rede in Zeile 332pp:
https://github.com/EWSoftware/PDI/blob/master/Source/EWSPDIData/PDIParser/PDIParser.cs
Gruß,
LBB
-
Hallo,
wenn die Library das machen "sollte", dann gibt es zwei Möglichkeiten:
- Du verwendest die Library falsch
- Die Library macht nicht was sie sollte
Zu 1. müsste die Dokumentation der Library Aufschluss geben.
Zu 2. kannst Du den entsprechenden Code Teil aus der Library testen, da dir der Quelltext vorliegt. Mit dem Debugger (oder durch gezieltes Ansehen des Quelltext) solltest Du herausfinden können, ob der genannte Quelltext Teil überhaupt verwendet wird und ob dieser zu einem richtigen Ergebnis führen kann.
- Gruß Florian
- Bearbeitet Florian Haupt Donnerstag, 1. März 2018 08:51 Format
- Als Antwort markiert LittleBlueBird Samstag, 3. März 2018 17:11
-
Hallo Florian,
vielen Dank für die Hinweise. Sie haben mich zur Lösung gebracht. Ich habe den Debugger verwendet, um mir die einzelnen Elemente der Auflistung anzuschauen. Dabei bin ich auf die Eigenschaft Value der Klasse FormattedName gestoßen. Die enthält den richtigen String.
Also habe ich mir die Demos angeschaut, die der Library beiliegen und festgestellt, dass ich die Eigenschaft DisplayMember der ListBox falsch gesetzt habe. Statt "FormattedName" muss ich folgendes verwenden:
VcardListBox.DisplayMember = "FormattedName_Value"
Dann wird der Inhalt der vcf-Datei richtig dargestellt.
Gruß,
LBB