Umlaute in XML-Datei schreiben
Moderator: Moderatoren
Umlaute in XML-Datei schreiben
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?
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Umlaute in XML-Datei schreiben
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
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.
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
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
Hubert
Re: Umlaute in XML-Datei schreiben
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.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2830
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: Umlaute in XML-Datei schreiben
Hallo,
dann schaue doch mal hier nach:
http://rishida.net/tools/conversion/
oder hier:
http://de.selfhtml.org/html/allgemein/zeichen.htm
dann schaue doch mal hier nach:
http://rishida.net/tools/conversion/
oder hier:
http://de.selfhtml.org/html/allgemein/zeichen.htm
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Umlaute in XML-Datei schreiben
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
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:
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.
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
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))
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
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Umlaute in XML-Datei schreiben
geniales Teil !georg hat geschrieben:Hallo,
dann schaue doch mal hier nach:http://rishida.net/tools/conversion/
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
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Umlaute in XML-Datei schreiben
Kann Clipper damit umgehen ?
chr( 0xC3 ) wäre natürlich eine enorme Schreiberleichterung. Xbase++ kann es ...
chr( 0xC3 ) wäre natürlich eine enorme Schreiberleichterung. Xbase++ kann es ...
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9391
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 363 Mal
- Kontaktdaten:
Re: Umlaute in XML-Datei schreiben
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/
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
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Umlaute in XML-Datei schreiben
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 wollenTom 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.
Gruß
Hubert
Hubert
Re: Umlaute in XML-Datei schreiben
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)),;
"&","&"),"'","'")
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
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)),;
"&","&"),"'","'")
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