FWriteLine mit Sonderzeichen

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

Post Reply
Tudorf
Posts: 4
Joined: Wed Feb 08, 2023 3:43 pm

FWriteLine mit Sonderzeichen

Post 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
User avatar
wriedmann
Posts: 3777
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Re: FWriteLine mit Sonderzeichen

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Tudorf
Posts: 4
Joined: Wed Feb 08, 2023 3:43 pm

Re: FWriteLine mit Sonderzeichen

Post 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
User avatar
wriedmann
Posts: 3777
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Re: FWriteLine mit Sonderzeichen

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Tudorf
Posts: 4
Joined: Wed Feb 08, 2023 3:43 pm

Re: FWriteLine mit Sonderzeichen

Post 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
User avatar
wriedmann
Posts: 3777
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Re: FWriteLine mit Sonderzeichen

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Post Reply