xsharp.eu • FWriteLine mit Sonderzeichen
Page 1 of 1

FWriteLine mit Sonderzeichen

Posted: Tue Dec 10, 2024 2:49 pm
by Tudorf
Hallo

Ich arbeite noch mit Visual Object. Wenn ich mich richtig erinnere sind die Sprachen sehr identisch.

Ich stehe etwas auf dem Schlauch. Ich möchte Daten mit FWriteLine() ausgeben. Meine Sonderzeichen (ÄÖÜ) werden aber nicht richtig übertragen. Ich vermute etwas im Bereich OEM/ANSI.

Die Text befinden sich in einer Datei die ich wie folgt erstelle Set Ansi wurde in beiden Versionen getestet.

Code: Select all

bDbf := { 	{ "Zeile"  , "C", 1024, 0 }}
				                 
//	SetAnsi(FALSE)		                 
	SetAnsi(true)		                 
				                 
	DBCREATE( new_name, bDbf, "DBFCDX")
	oDb1 := _db_dbf{new_name}   
Nachdem die Texte gespeichert wurden gebe ich sie wie folgt aus. Auch hier wurden die ausdokumentierten Versionen getestet.

Code: Select all

nOutfile  := FCreate("c:\_export\newfile.xml", FC_NORMAL)
	oDb1:gotop()   

	DO WHILE ! oDb1:EOF
//		FWriteLine(nOutfile,AllTrim(oDb1:FIELDGET(#zeile)))
		FWriteLine(nOutfile,AllTrim(Oem2Ansi(oDb1:FIELDGET(#zeile))))
//		FWriteLine(nOutfile,AllTrim(Ansi2Oem(oDb1:FIELDGET(#zeile))))
		oDb1:skip()
	enddo
	FClose(nOutfile) 
Irgendwo fehlt mir eine Kleinigkeit.

Hat jemand eine Idee?
Dane Martin

Re: FWriteLine mit Sonderzeichen

Posted: Tue Dec 10, 2024 3:00 pm
by wriedmann
Hallo Martin,
FWriteLine() schreibt ohne jede Konvertierung, der eingestellte Zeichensatz ist egal.
Konvertiert wird ggf. beim Lesen der DBF.
Ich vermute, das Problem liegt beim Zielsystem. XML wird sehr oft als UTF8 erwartet, und in diesem Fall musst Du vor dem Schreiben eine Konvertierung durchführen.
Wolfgang

Re: FWriteLine mit Sonderzeichen

Posted: Tue Dec 10, 2024 3:20 pm
by Tudorf
Hallo Wolfgang

Danke für die schnelle Antwort.

Wie kann ich eine Konvertierung durchführen?

Das ist eigentlich das, was ich versuche.
Also setAnsi, OEM2Ansi und Ansi2Oem.

Nach dem Schreiben öffne ich die Datei mit Notepad und die Sonderzeichen sind falsch. Ich erstelle aktuell die xml-Datei für E-Rechnung. Der onlineviewer öffnet die Datei ohne Probleme, zeigt aber die Sonderzeichen komisch an.

Danke Martin

Re: FWriteLine mit Sonderzeichen

Posted: Tue Dec 10, 2024 3:29 pm
by wriedmann
Hallo Martin,
bevor Du Dich an die Konvertierung setzt, musst Du erst mal verstehen, was Dein Ziel-Zeichensatz ist.
Ich nehme an, die DBF-Datei wird mit Deinem VO-Programm erstellt und beschrieben, also dürfte sie ANSI sein.
Was steht im Header der XML-Datei für ein Zeichensatz drin?
Du könntest mal die Funktion Ansi2UTF8() ausprobieren, die sollte Deinen Ansi-Text nach UTF8 konvertieren.
In der Hilfe ist diese Funktion nicht enthalten, es gibt sie aber in der System Library (zumindestens bei VO 2.8 SP4).
Wolfgang

Re: FWriteLine mit Sonderzeichen

Posted: Wed Dec 11, 2024 12:02 pm
by Tudorf
Hallo Wolfgang

Es funktioniert. Den Zwischenschritt mit der DBF habe ich rausgeschmissen und speichere die Daten direkt mit

FWriteLine(nOutfile,Ansi2UTF8("<ram:Content>Kopftext: äöüÄÖÜß</ram:Content>"))

Wordpad zeigt die Datei fehlerhaft an, aber der Viewer für die E-Rechnung zeigt alles richtig an und das ist die Hauptsache.

Die XML-Datei hat folgenden Kopf.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

Danke für deine Hilfe.
Martin

Re: FWriteLine mit Sonderzeichen

Posted: Wed Dec 11, 2024 12:37 pm
by wriedmann
Hallo Martin,
der XML-Header gibt als Zeichensatz UTF-8 an, und demzufolge musst Du diesen Zeichensatz zum Schreiben verwenden.
Dass Notepad das nicht richtig macht, wundert mich nicht, denn der wertet logischerweise den XML-Header nicht aus.
Wolfgang
P.S. ich war mir fast sicher, dass im XML-Header UTF-8 drinstehen würde