Umlaute in XML-Datei schreiben

Still in use?

Moderator: Moderatoren

Antworten
bendixen
Rookie
Rookie
Beiträge: 15
Registriert: Mi, 27. Jun 2012 12:35

Umlaute in XML-Datei schreiben

Beitrag von bendixen »

Für den SEPA-Zahlungsverkehr sind die Umlaute und ß zulässig, ich verzweifle momentan daran, diese in die XML-Datei hineinzubekommen. Wer kann mir helfen?
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute in XML-Datei schreiben

Beitrag von brandelh »

zunächst musst du klären, was du für einen Zeichensatz liefern musst.

Clipper nutzt OEM Zeichen, falls du ANSI abliefern musst, ist es am einfachsten die Zeichen per CHR() Code von Ansi anzugeben (die sehen unter DOS anders aus !)
Xbase++ würde dies per Funktion erledigen, aber mit Clipper muss man das selbst erledigen ;-)

OEM => ANSI

Code: Alles auswählen

ä = chr(132) => chr(228)
ö = chr(148) => chr(246)
ü = chr(129) => chr(252)
Ä = chr(142) => chr(196)
Ö = chr(153) => chr(214)
Ü = chr(154) => chr(220)
ß = chr(225) => chr(223)

Beispiel:
function Oem2Ansi(cString)
    cString := StrTran(cString,chr(132),chr(228))
    cString := StrTran(cString,chr(148),chr(246))
    cString := StrTran(cString,chr(129),chr(252))
    cString := StrTran(cString,chr(142),chr(196))
    cString := StrTran(cString,chr(153),chr(214))
    cString := StrTran(cString,chr(154),chr(220))
    cString := StrTran(cString,chr(225),chr(223))
return cString
sollte funktionieren, eventuelle Tippfehler oder Zahlendreher bitte selbst entfernen, ich habe das hier frei geschrieben ohne zu kompilieren. ;-)

PS: wenn du eine UTF-8 Datei liefern musst, wird es schwieriger ... eventuell kannst du aber auch im Header der Datei den OEM Zeichensatz festlegen,
sowas sollte in den Beschreibungen zu der Übergabeschnittstelle stehen.
Gruß
Hubert
bendixen
Rookie
Rookie
Beiträge: 15
Registriert: Mi, 27. Jun 2012 12:35

Re: Umlaute in XML-Datei schreiben

Beitrag von bendixen »

Danke für die Antwort, nur war/ist das meine übliche Konvertierung. SEPA verlangt XML mit UTF-8. Beispielweise ersetze ich das Hochkomma (') mit strtran(xxx,,"'","'") und das kaufmännische Und (&) mit strtran(xxx, "&","&"). Nur für die Umlaute und das ß habe ich keine Lösung.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Umlaute in XML-Datei schreiben

Beitrag von georg »

Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute in XML-Datei schreiben

Beitrag von brandelh »

deine Übersetzung ( strtran(xxx,,"'","'")) ist HTML code, kein UTF-8 !

Am einfachsten du nutzt einen Editor, der UTF-8 schreiben kann, tippst die fraglichen Zeichen ein und speicherst unter UTF-8.
Dann siehst du was du ersetzten musst.
Die Übersetzung NACH UTF-8 geht mit StrTran(), der Rest wird schwieriger ... eventuell hat hier auch schon jemand eine UTF-8 Funktion hinterlegt, dann aber wohl für ANSI.

Grundregel, alle 7-Bit Zeichen (also bis chr(127)) sind in allen Zeichensätzen (OEM, ANSI, UTF-8) gleich.
Alles was höher liegt, muss umgesetzt werden falls es für deine Aufgabe relefant ist.

Hier ist eine genaue Erklärung

:arrow: http://de.wikipedia.org/wiki/UTF-8

Beispiel ä:

Buchstabe ä => C3 A4 HEX, d.h. chr(195)+chr(164) (Umrechnung von HEX nach Dezimal : A = 10, A4 = 10*16+4, C=12, C3=12*16+3

Meine Funktion von oben kann man leicht umstellen auf Oem2UTF8:

Code: Alles auswählen

cString := StrTran(cString,chr(132),chr(228)) => cString := StrTran(cString,chr(132),chr(195)+chr(164))
Wenn ich die Erläuterungen richtig gelesen habe, sollte es keine Probleme mit dem Zahlenraum geben, aber garantieren kann ich das nicht.
Es bleibt eine Fleißaufgabe ;-)

PS: Mit Xbase++ nutzt man dazu Windows API Funktionen, die kann man aber aus Clipper wohl nicht aufrufen. Allerdings sollten es auch nicht allzuviele Zeichen sein.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute in XML-Datei schreiben

Beitrag von brandelh »

georg hat geschrieben:Hallo,
dann schaue doch mal hier nach:http://rishida.net/tools/conversion/
geniales Teil !

Zeichen: ä ö ü ß Ä Ö Ü " ! '
UTF-8 HEX: C3 A4 20 C3 B6 20 C3 BC 20 C3 9F 20 C3 84 20 C3 96 20 C3 9C 20 22 20 21 20 27

20 = Blank = chr(32), somit ...

ä = C3 A4
ö = C3 B6
ü = C3 BC
ß = C3 9F
Ä = C3 84
Ö = C3 96
Ü = C3 9C
" = 22 (bleibt gleich)
! = 21 (bleibt gleich)
' = 27 (bleibt gleich)

Vorsicht ist mit < und > geboten, da die unter XML Feldbegrenzer sind, hier ist deine HTML Zeichenersetzung nötig, bei ' sollte das nicht nötig sein.

PS: gibt es eine Adresse an die man solche Dateien zum Syntaxcheck senden kann ohne dass etwas ausgelöst wird ?
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute in XML-Datei schreiben

Beitrag von brandelh »

Kann Clipper damit umgehen ?

chr( 0xC3 ) wäre natürlich eine enorme Schreiberleichterung. Xbase++ kann es ...
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Umlaute in XML-Datei schreiben

Beitrag von Tom »

Ja, SEPA verlangt UTF8 - so steht es auch im Header der Datei(en). In Pablos "OT4XB" ist eine UTF8-Konvertierungsfunktion enthalten, Hubert hatte hier auch mal ein Beispiel gepostet, wenn ich mich recht erinnere.

ABER. Der SEPA-Standard unterstützt zwar auf der technischen Ebene Umlaute, aber die Bankensoftware(n) tun es überwiegend nicht. Bei den Verwendungszwecken dürfen eigentlich keine Umlaute und Sonderzeichen verwendet werden. Einige Programme konvertieren das automatisch beim Einlesen der SEPA-Dateien (oder auch bei der Eingabe im Online-Banking), andere nicht. Deshalb sollte man den Zeichensatz untersuchen, der sich z.B. aus Empfängerdaten und Verwendungszwecken ergibt - und z.B. Umlaute und andere Sonderzeichen ganz klassisch umwandeln (ä -> ae, é -> e usw.). Mit dem Ergebnis dieser Operation kann man auch direkt arbeiten, da der 7-Bit-ASCII-Zeichensatz in UTF8 enthalten ist.

Mehr dazu z.B. hier:

http://www.hettwer-beratung.de/sepa-spe ... ungszweck/
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute in XML-Datei schreiben

Beitrag von brandelh »

Tom hat geschrieben:Ja, SEPA verlangt UTF8 - so steht es auch im Header der Datei(en). In Pablos "OT4XB" ist eine UTF8-Konvertierungsfunktion enthalten, Hubert hatte hier auch mal ein Beispiel gepostet, wenn ich mich recht erinnere.
Wir sind hier im CLIPPER Bereich, da steht das nicht zur Verfügung, aber die komplette Umsetzung nach 7bit ist am Einfachsten und wenn die Banken das so wollen 8)
Gruß
Hubert
bendixen
Rookie
Rookie
Beiträge: 15
Registriert: Mi, 27. Jun 2012 12:35

Re: Umlaute in XML-Datei schreiben

Beitrag von bendixen »

Hallo an Euch alle,

mein Problem ist nun folgendermaßen gelöst:

strtran(strtran(strtran(strtran(strtran(strtran(strtran(strtran(strtran(infotext,;
'ä',chr(195) + chr(164)),'ö',chr(195) + chr(182)),'ü',chr(195) + chr(188)),;
'Ä',chr(195) + chr(132)),'Ö',chr(195) + chr(150)),'Ü',chr(195) + chr(156)),;
'ß',chr(195) + chr(159)),;
"&","&"),"'","&apos;")

Anmerkung: In der aktuellen SEPA-Vorschrift 2.8 sind Umlaute und das ß in der Zahlungsverkehrsdatei xxx.XML zulässig, ebenso & und Hochkomma.

Mein ursächliches Problem war die Verwendung der Codepage 437 anstelle 850.

Benutze seit 1986 erst dBase III, dann Clipper, zwischenzeitlich kurz (1999) und jetzt erneut Xbase seit 2013.

Ich bedanke mich für Euer Hilfebemühen.

Grüße aus Hamburg, Jürgen
schmä

Re: Umlaute in XML-Datei schreiben

Beitrag von schmä »

Rishida ist ja mal ein super Tool!
Antworten