ASXML Sonderzeichenübersetzung

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

ASXML Sonderzeichenübersetzung

Beitrag von Benz »

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
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
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

Beitrag von Herbert »

Wandelst du um von Oem zu Ansi oder umgekehrt?
Grüsse Herbert
Immer in Bewegung...
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: ASXML Sonderzeichenübersetzung

Beitrag von Benz »

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.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ASXML Sonderzeichenübersetzung

Beitrag von georg »

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?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: ASXML Sonderzeichenübersetzung

Beitrag von Wolfgang Ciriack »

Wie von Georg angegeben, nimm die Funktion AnsiToUTF8 aus der ot4xb.lib.
Viele Grüße
Wolfgang
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: ASXML Sonderzeichenübersetzung

Beitrag von Benz »

Okay, danke, das wäre zumindest mal eine Möglichkeit, aber hat Alaska das in der ASXML nicht berücksichtigt?
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
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:

Code: Alles auswählen

LOCAL aCH := {}
LOCAL cInhalt

XMLGetTag(nHandle,@aCH)
cInhalt := aCH[XMLTAG_CONTENT]
msgbox(cInhalt)
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 ? :cry:
Wäre doch schöner, wenn ich dazu keine externe Funktion benutzen müsste
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ASXML Sonderzeichenübersetzung

Beitrag von brandelh »

Hi,

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>
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 !

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 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.
Gruß
Hubert
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: ASXML Sonderzeichenübersetzung

Beitrag von Benz »

Hast du da auch die ASXML von Xbase benutzt?
Weil das ist ja ein widersprüchliches Ergebnis zu meinem oder nicht?
DelUser01

Re: ASXML Sonderzeichenübersetzung

Beitrag von DelUser01 »

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...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ASXML Sonderzeichenübersetzung

Beitrag von brandelh »

Benz hat geschrieben:Hast du da auch die ASXML von Xbase benutzt?
wie ich oben schrieb, habe ich das mitgelieferte Beispiel von ... Alaska benutzt.
ich habe das Alaska Beispiel mit Umlauten gespickt:
Gruß
Hubert
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 159
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

Re: ASXML Sonderzeichenübersetzung

Beitrag von Bernd Reinhardt »

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.

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
Vielleicht hilft dies weiter.
Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
Antworten