ASXML Sonderzeichenübersetzung
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
ASXML Sonderzeichenübersetzung
Hi,
Ich habe ein kleines Problem mit der ASXML-Benutzung.
Und zwar Gibt es in meinem XML-Dokument Sonderzeichen wie ä,ö und ü. Wenn ich allerdings ASXML nutze um auf die Tag-Inhalte mit den Sonderzeichen
zuzugreifen werden die Sonderzeichen als Zeichensalat übersetzt. Gibt es eine Möglichkeit das ASXML z.B. auf UTF-8 umzustellen?
Oder muss ich die Zeichen nachträglich wieder zurückwandeln?
Viele Grüße
Jens
Ich habe ein kleines Problem mit der ASXML-Benutzung.
Und zwar Gibt es in meinem XML-Dokument Sonderzeichen wie ä,ö und ü. Wenn ich allerdings ASXML nutze um auf die Tag-Inhalte mit den Sonderzeichen
zuzugreifen werden die Sonderzeichen als Zeichensalat übersetzt. Gibt es eine Möglichkeit das ASXML z.B. auf UTF-8 umzustellen?
Oder muss ich die Zeichen nachträglich wieder zurückwandeln?
Viele Grüße
Jens
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: ASXML Sonderzeichenübersetzung
Wandelst du um von Oem zu Ansi oder umgekehrt?
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
Re: ASXML Sonderzeichenübersetzung
ich hab SET CHARSET TO ANSI am Anfang (also in der Main) drin, ja, ist das der Fehler?
Hm habe das jetzt entfernt, jetzt sehen die S onderzeichen zwar anders aus, aber immer noch nicht richtig.
Hm habe das jetzt entfernt, jetzt sehen die S onderzeichen zwar anders aus, aber immer noch nicht richtig.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2825
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 96 Mal
- Danksagung erhalten: 13 Mal
Re: ASXML Sonderzeichenübersetzung
Hallo, Jens -
lade Dir mal von xbwin.com die OT4XB herunter. Da sind etliche Konvertierungsfunktionen drin, die Du mal ausprobieren solltest.
Wo tauchen die besonderen Zeichen auf - wenn Du sie im Programm anzeigst, oder im Debugger? Was genau willst Du machen?
lade Dir mal von xbwin.com die OT4XB herunter. Da sind etliche Konvertierungsfunktionen drin, die Du mal ausprobieren solltest.
Wo tauchen die besonderen Zeichen auf - wenn Du sie im Programm anzeigst, oder im Debugger? Was genau willst Du machen?
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.
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: ASXML Sonderzeichenübersetzung
Wie von Georg angegeben, nimm die Funktion AnsiToUTF8 aus der ot4xb.lib.
Viele Grüße
Wolfgang
Wolfgang
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
Re: ASXML Sonderzeichenübersetzung
Okay, danke, das wäre zumindest mal eine Möglichkeit, aber hat Alaska das in der ASXML nicht berücksichtigt?
ich gehe mit
auf die entsprechende Tag Ebene und lasse mir dann mit in der Methode search_childs_of_elements_execute_sequence den
Inahlt des Tags ausgeben, indem ich das hier anwende:
und obwohl das in der XML korrekt drin steht mit den Sonderzeichen werden die Sonderzeichen hier eben so dargestellt:
für ä: ä
für ö: ö
für ü: ü
(in der Main habe ich set charset to ansi drin, wie oben ja schon erwähnt)
Den Zeichensatz für die ASXML-Funktionen auf UTF-8 umzustellen geht also nicht ?
Wäre doch schöner, wenn ich dazu keine externe Funktion benutzen müsste
ich gehe mit
Code: Alles auswählen
nActions := XMLDocSetAction(nXSD_datei, "//tag1/tag2",;
{|cTag,cContent,aMember,nHandle| ::search_childs_of_elements_execute_sequence(cTag,cContent,aMember,nHandle)})
IF nActions != 0
XMLDocProcess(nXSD_datei)
XMLDocResetAction(nXSD_datei)
ENDIF
Inahlt des Tags ausgeben, indem ich das hier anwende:
Code: Alles auswählen
LOCAL aCH := {}
LOCAL cInhalt
XMLGetTag(nHandle,@aCH)
cInhalt := aCH[XMLTAG_CONTENT]
msgbox(cInhalt)
für ä: ä
für ö: ö
für ü: ü
(in der Main habe ich set charset to ansi drin, wie oben ja schon erwähnt)
Den Zeichensatz für die ASXML-Funktionen auf UTF-8 umzustellen geht also nicht ?
Wäre doch schöner, wenn ich dazu keine externe Funktion benutzen müsste
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: ASXML Sonderzeichenübersetzung
Hi,
ich habe das Alaska Beispiel mit Umlauten gespickt:
dann habe ich dieses Beispiel so aufgerufen:
xml2asci problems.xml > XML.TXT
das Ergebnis als solches enthält einige Verweise die ich jetzt nicht verstehe, aber die Umlaute stimmen !
die PRG des Beispieles enthält KEINEN Hinweis auf CHARSET, somit müsste die EXE OEM sein.
Die ausgegebene Datei ist wie die eingelesene ANSI !
Ich vermute also, dass die Angabe des Zeichensatzes im XML Header die interne Verarbeitung steuert.
Was passiert wenn man die XML Datei als UTF-8 speichert und dies auch sauber im Header angibt weiß ich nicht.
PS: da die Umleitung in die Datei ANSI erzeugt hat, können die Dateiinhalte im RAM nur in ANSI vorgelegen haben, sonst wäre OEM ausgegeben worden.
ich habe das Alaska Beispiel mit Umlauten gespickt:
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE problems SYSTEM "problems.dtd">
-<problems>
<![CDATA[ Hello, welcome to our little problems data base. ]]>
<!-- START OF EDITABLE SECTION!-->
-<report state="CLOSED" user="Billä" id="0001-4">
<topic> Window open after lunch </topic>
<quest> Why was the window open after I came back from lunch äöü? </quest>
<answer> The answer is blown in the wind. </answer>
<file> marlene.dit </file>
<related id=""/>
<followup id=""/>
</report>
-<report state="OPEN" user="Jane" id="0001-5">
<topic> Could not open water bottle using 2 fingers </topic>
<quest> I tried to open my water bottle using 2 fingers but failed. If anybody knows the trick let me know. </quest>
<answer> </answer>
<file> not filed </file>
<related id=""/>
<followup id=""/>
</report>
-<report state="CLOSED" user="Tim" id="0001-6">
<topic> How to open a water bottle using one finger only </topic>
<quest> How do I open a water bottle using one finger only? </quest>
<answer>Buy an opener. </answer>
<file> </file>
<related id=""/>
<followup id="0001-5"/>
</report>
</problems>
xml2asci problems.xml > XML.TXT
das Ergebnis als solches enthält einige Verweise die ich jetzt nicht verstehe, aber die Umlaute stimmen !
Code: Alles auswählen
--- Tag ( 4082192 )---
Name : #ROOT
Content: NIL
Attrib : NIL
Child : { 4082336}
--- Tag ( 4082336 )---
Name : problems
Content: NIL
Attrib : NIL
Child : { 4082416, 4084240, 4087024}
--- Tag ( 4082416 )---
Name : #CDATA
Content:
Hello, welcome to our little problems data base.
Attrib : NIL
Child : { 4082576}
--- Tag ( 4082576 )---
Name : report
Content: NIL
Attrib : {{id, 0001-4}, {user, Billä}, {state, CLOSED}}
Child : { 4082992, 4083200, 4083440, 4083664, 4083856, 4084048}
--- Tag ( 4082992 )---
Name : topic
Content: Window open after lunch
Attrib : NIL
Child : { 4083072}
--- Tag ( 4083072 )---
Name : #PCDATA
Content: Window open after lunch
Attrib : NIL
Child : NIL
--- Tag ( 4083200 )---
Name : quest
Content: Why was the window open after I came back from lunch äöü?
Attrib : NIL
Child : { 4083280}
--- Tag ( 4083280 )---
Name : #PCDATA
Content: Why was the window open after I came back from lunch äöü?
Attrib : NIL
Child : NIL
--- Tag ( 4083440 )---
Name : answer
Content: The answer is blown in the wind.
Attrib : NIL
Child : { 4083520}
--- Tag ( 4083520 )---
Name : #PCDATA
Content: The answer is blown in the wind.
Attrib : NIL
Child : NIL
--- Tag ( 4083664 )---
Name : file
Content: marlene.dit
Attrib : NIL
Child : { 4083744}
--- Tag ( 4083744 )---
Name : #PCDATA
Content: marlene.dit
Attrib : NIL
Child : NIL
--- Tag ( 4083856 )---
Name : related
Content: NIL
Attrib : {{id, }}
Child : NIL
--- Tag ( 4084048 )---
Name : followup
Content: NIL
Attrib : {{id, }}
Child : NIL
--- Tag ( 4084240 )---
Name : report
Content: NIL
Attrib : {{id, 0001-5}, {user, Jane}, {state, OPEN}}
Child : { 4084656, 4084880, 4085168, 4085248, 4085440, 4086832}
--- Tag ( 4084656 )---
Name : topic
Content: Could not open water bottle using 2 fingers
Attrib : NIL
Child : { 4084736}
--- Tag ( 4084736 )---
Name : #PCDATA
Content: Could not open water bottle using 2 fingers
Attrib : NIL
Child : NIL
--- Tag ( 4084880 )---
Name : quest
Content: I tried to open my water bottle using 2 fingers
but failed. If anybody knows the trick let me know.
Attrib : NIL
Child : { 4084960}
--- Tag ( 4084960 )---
Name : #PCDATA
Content: I tried to open my water bottle using 2 fingers
but failed. If anybody knows the trick let me know.
Attrib : NIL
Child : NIL
--- Tag ( 4085168 )---
Name : answer
Content: NIL
Attrib : NIL
Child : NIL
--- Tag ( 4085248 )---
Name : file
Content: not filed
Attrib : NIL
Child : { 4085328}
--- Tag ( 4085328 )---
Name : #PCDATA
Content: not filed
Attrib : NIL
Child : NIL
--- Tag ( 4085440 )---
Name : related
Content: NIL
Attrib : {{id, }}
Child : NIL
--- Tag ( 4086832 )---
Name : followup
Content: NIL
Attrib : {{id, }}
Child : NIL
--- Tag ( 4087024 )---
Name : report
Content: NIL
Attrib : {{id, 0001-6}, {user, Tim}, {state, CLOSED}}
Child : { 4087440, 4087680, 4087920, 4088128, 4088208, 4088400}
--- Tag ( 4087440 )---
Name : topic
Content: How to open a water bottle using one finger only
Attrib : NIL
Child : { 4087520}
--- Tag ( 4087520 )---
Name : #PCDATA
Content: How to open a water bottle using one finger only
Attrib : NIL
Child : NIL
--- Tag ( 4087680 )---
Name : quest
Content: How do I open a water bottle using one finger only?
Attrib : NIL
Child : { 4087760}
--- Tag ( 4087760 )---
Name : #PCDATA
Content: How do I open a water bottle using one finger only?
Attrib : NIL
Child : NIL
--- Tag ( 4087920 )---
Name : answer
Content: Buy an opener.
Attrib : NIL
Child : { 4088000}
--- Tag ( 4088000 )---
Name : #PCDATA
Content: Buy an opener.
Attrib : NIL
Child : NIL
--- Tag ( 4088128 )---
Name : file
Content: NIL
Attrib : NIL
Child : NIL
--- Tag ( 4088208 )---
Name : related
Content: NIL
Attrib : {{id, }}
Child : NIL
--- Tag ( 4088400 )---
Name : followup
Content: NIL
Attrib : {{id, 0001-5}}
Child : NIL
Die ausgegebene Datei ist wie die eingelesene ANSI !
Ich vermute also, dass die Angabe des Zeichensatzes im XML Header die interne Verarbeitung steuert.
Was passiert wenn man die XML Datei als UTF-8 speichert und dies auch sauber im Header angibt weiß ich nicht.
PS: da die Umleitung in die Datei ANSI erzeugt hat, können die Dateiinhalte im RAM nur in ANSI vorgelegen haben, sonst wäre OEM ausgegeben worden.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 440
- Registriert: Mo, 30. Mai 2011 15:06
- Danksagung erhalten: 1 Mal
Re: ASXML Sonderzeichenübersetzung
Hast du da auch die ASXML von Xbase benutzt?
Weil das ist ja ein widersprüchliches Ergebnis zu meinem oder nicht?
Weil das ist ja ein widersprüchliches Ergebnis zu meinem oder nicht?
Re: ASXML Sonderzeichenübersetzung
Hallo "Benz"
Deine Ansi- oder OEM-Einstellung musst Du zusätzlich zur UTF8-Umwandlung beachten und bei Bedarf zusätzlich wandeln.
Im Internet findest Du viele Zeichentabellen für UTF8 mit denen Du Deinen eigenen Wandler bauen kannst.
Wenn Du so etwas umsetzen willst musst Du Dir über die vorliegenden Zeichensätze und der benötigten Zielrichtung der Umwandlung genau Bescheid wissen. Alles andere ist Zufall.
Fürs Erste kannst Du ja erst einmal deine in Xbase vorhandenen Daten in eine schlichte TXT speichern. Diese öffnest Du mit Notepad und kannst erst einmal feststellen ob alle Wörter - insbesondere die mit Umlauten - lesbar sind. Wenn nicht musst Du erst einmal die Ansi-/OEM-Wandlung einfügen.
Dann machst Du das Ganz mit dem XML-Rahmen. das wird dann auch in Notepad sauber lesbar sein.
Jetzt setzt Du zusätzlich für die echten Daten die UTF8-Wandlung ein. Das Ergebnis importierst Du in die App für welche Du die XML-Datei erstellt hast.
Wenn nach dem Import die Daten immer noch nicht stimmen hast Du a) einen Fehler in der UTF8-Wandlung oder b) einen Fehler in der Einstellung der XML-Import-Schnittstelle.
Letzteres richtig anzupassen sollte mit ein paar Versuchen herauszufinden sein...
Deine Ansi- oder OEM-Einstellung musst Du zusätzlich zur UTF8-Umwandlung beachten und bei Bedarf zusätzlich wandeln.
Im Internet findest Du viele Zeichentabellen für UTF8 mit denen Du Deinen eigenen Wandler bauen kannst.
Wenn Du so etwas umsetzen willst musst Du Dir über die vorliegenden Zeichensätze und der benötigten Zielrichtung der Umwandlung genau Bescheid wissen. Alles andere ist Zufall.
Fürs Erste kannst Du ja erst einmal deine in Xbase vorhandenen Daten in eine schlichte TXT speichern. Diese öffnest Du mit Notepad und kannst erst einmal feststellen ob alle Wörter - insbesondere die mit Umlauten - lesbar sind. Wenn nicht musst Du erst einmal die Ansi-/OEM-Wandlung einfügen.
Dann machst Du das Ganz mit dem XML-Rahmen. das wird dann auch in Notepad sauber lesbar sein.
Jetzt setzt Du zusätzlich für die echten Daten die UTF8-Wandlung ein. Das Ergebnis importierst Du in die App für welche Du die XML-Datei erstellt hast.
Wenn nach dem Import die Daten immer noch nicht stimmen hast Du a) einen Fehler in der UTF8-Wandlung oder b) einen Fehler in der Einstellung der XML-Import-Schnittstelle.
Letzteres richtig anzupassen sollte mit ein paar Versuchen herauszufinden sein...
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: ASXML Sonderzeichenübersetzung
wie ich oben schrieb, habe ich das mitgelieferte Beispiel von ... Alaska benutzt.Benz hat geschrieben:Hast du da auch die ASXML von Xbase benutzt?
ich habe das Alaska Beispiel mit Umlauten gespickt:
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 159
- Registriert: So, 16. Apr 2006 11:12
- Wohnort: Öhringen
Re: ASXML Sonderzeichenübersetzung
Hallo.
Hatte auch das Problem. Man muss beachten das bei XML die Umlaute nicht als einzelner Character dargestellt werden.
Habe hier mal die Umlaute gewandelt. Einfach den String durchgegangen und Sonderzeichen ersetzt.
Vielleicht hilft dies weiter.
Gruß
Bernd
Hatte auch das Problem. Man muss beachten das bei XML die Umlaute nicht als einzelner Character dargestellt werden.
Habe hier mal die Umlaute gewandelt. Einfach den String durchgegangen und Sonderzeichen ersetzt.
Code: Alles auswählen
cRetString := ""
for nI = 1 to len(cString)
cChar := substr(cString, nI, 1)
do case // Umlaute ersetzen
case cChar == "ö"
cSub := chr(195) + chr(182)
case cChar == "ü"
cSub := chr(195) + chr(188)
case cChar == "ä"
cSub := chr(195) + chr(164)
case cChar == "ß"
cSub := chr(195) + chr(159)
case cChar == "Ö"
cSub := chr(195) + chr(150)
case cChar == "Ü"
cSub := chr(195) + chr(156)
case cChar == "Ä"
cSub := chr(195) + chr(132)
case cChar == "&"
cSub := "&"
case cChar == "<"
cSub := "<" // <
case cChar == ">"
cSub := ">" // >
case cChar == chr(34)
cSub := """ // "
case cSub == chr(130) //é
cSub := chr(195) + chr(169)
case cSub == chr(138) // è
cSub := chr(195) + chr(168)
case cSub == chr(136) // ê
cSub := chr(195) + chr(170)
case cSub == chr(160) //á
cSub := chr(195) + chr(161)
case cSub == chr(133) // à
cSub := chr(195) + chr(160)
case cSub == chr(131) // â
cSub := chr(195) + chr(162)
OTHERWISE
if asc(cChar) > 128 // Sonderzeichen nicht erlaubt
cSub := " "
else
cSub := cChar // Kein Umlaut somit bleibt der Character
endif
ENDCASE
cRetString := cRetString + cSub // Datensatz wieder zusammensetzen.
next
Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
fa.reinhardt@gmx.de