[Problem] JFritz [v0.7.8][Bug] Telefonbuch-Import

MaxHinrich

Neuer User
Mitglied seit
3 Mai 2020
Beiträge
3
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen,


beim Versuch das Fritz!Box-Telefonbuch in JFritz zu importieren muss beachtet werden, dass Umlaute, das "ß", das "&" und möglicherweise auch noch andere Zeichen anscheinend nicht akzeptiert werden. Obwohl in der Originaldatei Angaben mit diesen Zeichen existieren (z. B. München).

Im Einzelnen:
1 Telefonbuch der Fritz!Box als XML-Datei sichern.
2 Mithilfe eines Makros (Excel 2016) Aufbau einer neuen XML-Datei.
2.1 Vor- und Nachnamen trennen.
2.2 Übernahme der Ortsnetznamen aus der JFritz-Datei "areacodes_germany.csv".
2.3 Dateiaufbau entsprechend der Datei "jfritz.phonebook.xml".
3 Dateiimport in JFritz

Die Import findet nur statt, wenn die o. a. Zeichen konvertiert wurden (z. B. ä = ae).

Dieser Datensatz (mit entsprechenden Kopfdaten) würde nicht importiert werden:

<entry private="false">
<name>
<lastname>AOT</lastname>
</name>
<address>
<city>München</city>
</address>
<phonenumbers standard="home">
<number type="home">+498912345678</number>
</phonenumbers>
</entry>

Ein Zurückändern der ausgetauschten Werte in der Datei "jfritz.phonebook.xml" ist ohne Probleme aber mit Aufwand möglich.

JFritz Version 0.7.8
Windows 10 64bit (aktuell)
Excel 2016 (aktuell)

Vielleicht lässt sich das beschriebene Verhalten ändern.
 

Pikachu

Aktives Mitglied
Mitglied seit
18 Nov 2006
Beiträge
2,418
Punkte für Reaktionen
33
Punkte
48
Hallo,

Dein Problem ist ganz einfach das dass du die Datei JFritz.xml nicht als UTF-8 Gespeichert hast,
wie es im Kopf der xml steht <?xml version="1.0" encoding="UTF-8"?>

Wenn es Excel nicht kann dann einfach mal im Windows Editor Öffnen und als Neue Datei im UTF-8 Format speichern.

Du kannst es auch mal hiermit FbJfXMLtoFbJfXML.exe versuchen das Tool kann es in beiden Richtungen FB zu JFritz und JFritz zu FB

Die FB.xml wird als <?xml version="1.0" encoding="UTF-8"?> und <?xml version="1.0" encoding="iso-8859-1"?>
unterstützt sowohl beim Lesen und Schreiben, für das Schreiben der FB.xml muss aber in der FbJfXMLtoFbJfXML.ini Datei
der Eintrag Angepasst werden für iso-8859-1 = FbTbOutXmlEncoding="iso-8859-1"
und für UTF-8 = FbTbOutXmlEncoding="UTF-8"

Bitte beachten erst ab mindestens Fritz OS 6 wird UTF-8 Ünterstützt

Änderungen ab mindestens Fritz OS 7 werden von dem Tool nicht Ünterstüzt da ich keine FritzBox mit Version 7 habe Sorry.
 

MaxHinrich

Neuer User
Mitglied seit
3 Mai 2020
Beiträge
3
Punkte für Reaktionen
0
Punkte
1
Hallo Pikachu,

vielen Dank für die Antwort.

Ich habe nunmehr die nicht UTF-8 konformen Zeichen im Makro entsprechend ausgetauscht. Beim Zeichen "&" ist der Austausch sinnlos, weil der Code jeweils identisch ist. Das Einlesen in JFritz funktioniert trotzdem nicht, das Zeichen "&" muss (z. B. gegen "+") ausgetauscht werden.

Unter Berücksichtigung dieser Änderungen ist das Einlesen ohne Probleme möglich.

Nochmals vielen Dank.
 

Pikachu

Aktives Mitglied
Mitglied seit
18 Nov 2006
Beiträge
2,418
Punkte für Reaktionen
33
Punkte
48
Na ja nicht gerade die beste Lösung was du hast, besser ist es die Ansi Zeichen ÄÖÜ usw.
vor dem Speichern in UTF-8 zu wandeln und als Binäre Datei zu Speichern ohne Bom da JFritz
das nicht mag.

Ein Beispiel Findet man hier: CSV Export/Speichern als UTF-8
und
Mit Excel VBA Text-Datei schreiben (UTF-8)
usw. im Netz mit Google.

Ich selbst Speichere meine XML Erstellte Datei ohne Bom als Binäre Text Datei
nachdem ich vorher den Text nach UTf-8 Übersetzt habe und die Zeichen die JFritz in
der XML nicht mag.


Ich Übersetze zuerst die entsprechenden Text Felder die Zeichen enthalten die JFritz sonst nicht Lesen kann zum Beispiel hier:
Code:
       sLastName = JFritz_HTMLEncode_ISO8859_1(sLastName)   ' "Last Name" ' 27.11.2017
       sFirstName = JFritz_HTMLEncode_ISO8859_1(sFirstName) ' "First Name" ' 27.11.2017
       sCompany = JFritz_HTMLEncode_ISO8859_1(sCompany)   ' "Company" ' 27.11.2017

       sImageURL = JFritz_HTMLEncode_ISO8859_1(sImageURL) ' "picture" / "imageURL" 27.11.2017

       sEMail = JFritz_HTMLEncode_ISO8859_1(sEMail)       ' "E-Mail" 27.11.2017
und danach zu UTF-8
Code:
     IF nOutXmlEncodingUtf8 = 1 THEN ' 27.11.2017
'
      strAnsi = sTmpStr
      sTmpStr = AnsiToUtf8(strAnsi)
'
     END IF
vor dem Speichern.

Beispiel Ausschnitte von meinem Tool das in PowerBasic 9 für Windows erstellt ist.

Code:
' 10.05.2010
' AnsiToUtf8
' Utf8ToAnsi
'
'
DECLARE FUNCTION AnsiToUtf8(BYVAL strAnsi AS STRING) AS STRING
DECLARE FUNCTION Utf8ToAnsi(BYVAL strUtf8 AS STRING) AS STRING
'
'
FUNCTION AnsiToUtf8(BYVAL strAnsi AS STRING) AS STRING
'
LOCAL sBuffer AS STRING
LOCAL nLength AS LONG
'
sBuffer = SPACE$(LEN(strAnsi) * 2)
MultiByteToWideChar %CP_ACP, 0, BYVAL STRPTR(strAnsi), -1, BYVAL STRPTR(sBuffer), LEN(sBuffer)
strAnsi = sBuffer
nLength = WideCharToMultiByte(%CP_UTF8, 0, BYVAL STRPTR(strAnsi), -1, BYVAL (0), 0, BYVAL (0), BYVAL (0))
sBuffer = SPACE$(nLength -1)
WideCharToMultiByte %CP_UTF8, 0, BYVAL STRPTR(strAnsi), -1, BYVAL STRPTR(sBuffer), LEN(sBuffer), BYVAL (0), BYVAL (0)
'
FUNCTION = sBuffer
'
END FUNCTION
'
'
FUNCTION Utf8ToAnsi(BYVAL strUtf8 AS STRING) AS STRING
'
LOCAL sBuffer AS STRING
LOCAL nLength AS LONG
'
sBuffer = SPACE$(LEN(strUtf8) * 2)
nLength = MultiByteToWideChar(%CP_UTF8, 0, BYVAL STRPTR(strUtf8), -1, BYVAL STRPTR(sBuffer), LEN(sBuffer))
strUtf8 = sBuffer
sBuffer = SPACE$(nLength -1)
WideCharToMultiByte(%CP_ACP, 0, BYVAL STRPTR(strUtf8), -1, BYVAL STRPTR(sBuffer), LEN(sBuffer), BYVAL (0), BYVAL (0))
'
FUNCTION = sBuffer
'
END FUNCTION
'
'
 DECLARE FUNCTION JFritz_HTMLDecode_ISO8859_1(sText AS STRING) AS STRING
 DECLARE FUNCTION JFritz_HTMLEncode_ISO8859_1(sText AS STRING) AS STRING 
'
'
FUNCTION JFritz_HTMLDecode_ISO8859_1(sText AS STRING) AS STRING
' 21.05.2010 HTMLDecode_ISO8859_1
' Ersetzt in den Textfeldern die Zeichen
'  &amp;  = &
'  &apos; = '
'  &lt;   = <
'  &gt;   = >
'
' REPLACE "&nbsp;" WITH CHR$(32) IN sText ' Space ' Wird in JFritz nicht unterstützt
' REPLACE "&quot;" WITH CHR$(34) IN sText ' "     ' Wird in JFritz nicht unterstützt
REPLACE "&amp;" WITH CHR$(38) IN sText  ' &
REPLACE "&apos;" WITH CHR$(39) IN sText ' '
REPLACE "&lt;" WITH CHR$(60) IN sText   ' <
REPLACE "&gt;" WITH CHR$(62) IN sText   ' >
'
JFritz_HTMLDecode_ISO8859_1 = sText
'
END FUNCTION
'
'
FUNCTION JFritz_HTMLEncode_ISO8859_1(sText AS STRING) AS STRING
' 21.05.2010 JFritz_HTMLEncode_ISO8859_1
' Ersetzt in den Textfeldern die Zeichen
'  & = &amp;
'  ' = &apos;
'  < = &lt;
'  > = &gt;
'
' REPLACE CHR$(32) WITH "&nbsp;" IN sText ' Space ' Wird in JFritz nicht unterstützt
' REPLACE CHR$(34) WITH "&quot;" IN sText ' "     ' Wird in JFritz nicht unterstützt
REPLACE CHR$(38) WITH "&amp;" IN sText   ' &
REPLACE CHR$(39) WITH "&apos;" IN sText  ' '
REPLACE CHR$(60) WITH "&lt;" IN sText    ' <
REPLACE CHR$(62) WITH "&gt;" IN sText    ' >
'
JFritz_HTMLEncode_ISO8859_1 = sText
'
END FUNCTION
'
'
Vielleicht Hilft das ein bisschen weiter und du kannst es nach VBA übersetzen anpassen,
aber vieles Findet man mit Google schon zu VBA wie das AnsiToUtf8 und Utf8ToAnsi usw.

Und wie man eine Datei ohne Bom Speichert.

Code:
<entry private="false">
    <name>
        <firstname>ÄÖÜßäöü ? &lt;&apos;&amp;&apos;&gt;</firstname>
        <lastname>Müller &lt;&apos;&amp;&apos;&gt;""</lastname>
    </name>
    <company>&lt;&apos;&amp;&apos;&gt;</company>
    <address>
        <street>&lt;&apos;&amp;&apos;&gt;</street>
        <postcode>&lt;&apos;&amp;&apos;&gt;</postcode>
        <city>&lt;&apos;&amp;&apos;&gt;</city>
    </address>
    <phonenumbers standard="mobile">
        <number type="mobile">017155533399</number>
    </phonenumbers>
    <internet>
        <email>"+4917155533399" &apos;&amp;&apos; &lt;[email protected]&gt;</email>
    </internet>
</entry>
 
Zuletzt bearbeitet:

MaxHinrich

Neuer User
Mitglied seit
3 Mai 2020
Beiträge
3
Punkte für Reaktionen
0
Punkte
1
Hallo Pikachu,

vielen Dank für die sehr umfangreiche Anleitung. Auch die vorhandenen Links habe ich mir angesehen. Leider bin ich vollkommen überfordert. Mein Programmierniveau reicht dafür leider nicht aus. Also werde ich mit der von mir gewählten Lösung zufrieden sein (müssen).