mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 28.03.2024 19:25 Benutzername: Passwort: Auto-Login

Thema: XML in Flash einlesen - Umlaute verschwinden ! vom 20.11.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Multimedia -> XML in Flash einlesen - Umlaute verschwinden !
Autor Nachricht
Peal
Threadersteller

Dabei seit: 02.12.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Do 20.11.2008 21:30
Titel

XML in Flash einlesen - Umlaute verschwinden !

Antworten mit Zitat Zum Seitenanfang

Servus kollegaz

Lang ist es her, das ich mich in Flash tummelte, damals bauten wir noch Seiten ohne xml einbindungen.
Heute nen Flash template erworben und war erstmal baff vor soviel as. und .xml handling!

Zu meinem Problem

Ein Flash8 Template arbeitet mit einem XMLParser und liest aus einer xml die texte für den Inhalt.
Die xml beginnt mit:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>


Laut vielen Aussagen imNetz ist dies bereits die Westeuropäische encodierung.
Aber die fertige SWF gibt die Texte ohne Umlaute wieder, woran kann es liegen ?

Ich vermute das es an dem xml handling, also dem XMLParser von dieser Templateschmiede liegt.
Hier könnt ihr ihn euch anschauen:
Code:
import mx.utils.Delegate;


class gs.dataTransfer.XMLParser {
   static var CLASS_REF = gs.dataTransfer.XMLParser;
   private static var _parsers_array:Array;
   private var _url_str:String;
   private var _onComplete_func:Function;
   private var _xml:XML;
   private var _results_obj:Object;
   var parse:Function; //Just for backward compatibility. It's essentially an alias pointing to the initLoad() function.
   
   function XMLParser() {
      parse = initLoad; //Just for backward compatibility. It's essentially an alias pointing to the initLoad() function.
      if (_parsers_array == undefined) {
         _parsers_array = [];
      }
      _parsers_array.push(this);
   }
   
   static function load(url_str:String, onComplete_func:Function, results_obj:Object):XMLParser {
      var parser_obj = new XMLParser();
      parser_obj.initLoad(url_str, onComplete_func, results_obj);
      return parser_obj;
   }
   
   static function sendAndLoad(toSend_obj:Object, url_str:String, onComplete_func:Function, results_obj:Object):XMLParser {
      var parser_obj = new XMLParser();
      parser_obj.initSendAndLoad(toSend_obj, url_str, onComplete_func, results_obj);
      return parser_obj;
   }
   
   
   function initLoad(url_str:String, onComplete_func:Function, results_obj:Object) {
      if (results_obj == undefined) {
         results_obj = {};
      }
      _results_obj = results_obj;
      _url_str = url_str;
      _onComplete_func = onComplete_func;
      _xml = new XML();
      _xml.ignoreWhite = true;
      _xml.onLoad = Delegate.create(this, this.parseLoadedXML);
      _xml.load(_url_str);
   }
   
   function initSendAndLoad(toSend_obj:Object, url_str:String, onComplete_func:Function, results_obj:Object) {
      if (results_obj == undefined) {
         results_obj = {};
      }
      _results_obj = results_obj;
      _url_str = url_str;
      _onComplete_func = onComplete_func;
      if (toSend_obj instanceof XML) {
         var xmlToSend_obj = toSend_obj;
      } else {
         var xmlToSend_obj = XMLParser.objectToXML(toSend_obj);
      }
      _xml = new XML();
      _xml.ignoreWhite = true;
      _xml.onLoad = Delegate.create(this, this.parseLoadedXML);
      xmlToSend_obj.sendAndLoad(_url_str, _xml);
   }
   
   
   function searchAndReplace(holder, searchfor, replacement) {
   var temparray = holder.split(searchfor);
   var holder = temparray.join(replacement);
   return (holder);
   }
   
   
   private function parseLoadedXML(success_boolean) {
      if (success_boolean == false) {
         trace("XML FAILED TO LOAD! ("+_url_str+")");
         _onComplete_func(false);
         return;
      }
      var x = this._xml;
      var c = x.firstChild.firstChild; //"c" is for current_node
      var last_node = x.firstChild.lastChild;
      x.firstChild.obj = _results_obj; //Allows us to tack on all the arrays and objects to this instance for easy retrieval by the user. If this causes a problem, we could create a public object variable that holds everything, but this simplifies things for the user.
      while(c != undefined) {
         //We ran into an issue where Flash was creating an extra subnode anytime we had content in a node like <NODE>My Content</NODE>. The tip off is when the nodeName is null and the nodeType is 3 (text).
         if (c.nodeName == null && c.nodeType == 3) {
            c.parentNode.obj.value = searchAndReplace(c.nodeValue, '\r\n', '');
         } else {
            var o = {};
            for (var att in c.attributes) {
               o[att] = c.attributes[att];
            }
            var pn = c.parentNode.obj;
            if (pn[c.nodeName] == undefined) {
               pn[c.nodeName] = [];
            }
            c.obj = o;
            pn[c.nodeName].push(o);
         }
         
         if (c.childNodes.length > 0) {
            c = c.childNodes[0];
         } else {
            var next_node = c;
            while(next_node.nextSibling == undefined && next_node.parentNode != undefined) {
               next_node = next_node.parentNode;
            }
            c = next_node.nextSibling;
            if (next_node == last_node) {
               c = undefined;
            }
         }
      }
      _onComplete_func(true, _results_obj, x);
   }
   
   //Allows us to translate an object (typically with arrays attached to it) back into an XML object. This is useful when we need to send it back to the server or save it somewhere.
   public static function objectToXML(o:Object, rootNodeName_str:String):XML {
      if (rootNodeName_str == undefined) {
         rootNodeName_str = "XML";
      }
      var xml:XML = new XML();
      var n:XMLNode = xml.createElement(rootNodeName_str);
      var props = [];
      var prop;
      for (var p in o) {
         props.push(p);
      }
      for (var p = props.length - 1; p >= 0; p--) { //By default, attributes are looped through in reverse, so we go the opposite way to accommodate for this.
         prop = props[p];
         if (typeof(o[prop]) == "object" && o[prop].length > 0) { //Means it's an array!
            arrayToNodes(o[prop], n, xml, prop);
         } else if (prop == "value") {
            var tn:XMLNode = xml.createTextNode(o.value);
            n.appendChild(tn);
         } else {
            n.attributes[prop] = o[prop];
         }
      }
      xml.appendChild(n);
      return xml;
   }
   
   //Recursive function that walks through any sub-arrays as well...
   private static function arrayToNodes(ar:Array, parentNode:XMLNode, xml:XML, nodeName_str:String):Void {
      var chldrn = [];
      var props:Array;
      var prop;
      var n:XMLNode;
      var o:Object;
      for (var i = ar.length - 1; i >= 0; i--) {
         n = xml.createElement(nodeName_str);
         o = ar[i];
         props = [];
         for (var p in o) {
            props.push(p);
         }
         for (var p = props.length - 1; p >= 0; p--) { //By default, attributes are looped through in reverse, so we go the opposite way to accommodate for this.
            prop = props[p];
            if (typeof(o[prop]) == "object" && o[prop].length > 0) { //Means it's an array!
               arrayToNodes(o[prop], n, xml, prop);
            } else if (prop != "value") {
               n.attributes[prop] = o[prop];
            } else {
               var tn:XMLNode = xml.createTextNode(o.value);
               n.appendChild(tn);
            }
         }
         chldrn.push(n);
         //parentNode.appendChild(n);
      }
      for (var i = chldrn.length - 1; i >= 0; i--) {
         parentNode.appendChild(chldrn[i]);
      }
   }
   
   public function destroy():Void {
      delete _xml;
      for (var i = 0; i < _parsers_array.length; i++) {
         if (this == _parsers_array[i]) {
            _parsers_array.splice(i, 1);
         }
      }
      destroyInstance(this);
   }
   
   static function destroyInstance(i:XMLParser):Void {
      delete i;
   }
   
//---- GETTERS / SETTERS --------------------------------------------------------------------
   static function get active_boolean():Boolean {
      if (_parsers_array.length > 0) {
         return true;
      } else {
         return false;
      }
   }
   
}


Kann mir da irgentwer helfen ? Bin mit meinem Latein, nach einem Tag am ende - ist für nen Kunden, also von daher is etwas eilig :/


Zuletzt bearbeitet von Peal am Do 20.11.2008 21:32, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
phihochzwei
Moderator

Dabei seit: 08.06.2006
Ort: Mülheim an der Ruhr
Alter: 46
Geschlecht: Männlich
Verfasst Do 20.11.2008 21:42
Titel

Re: XML in Flash einlesen - Umlaute verschwinden !

Antworten mit Zitat Zum Seitenanfang

Code:
<?xml version="1.0" encoding="UTF-8"?>
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
Peal
Threadersteller

Dabei seit: 02.12.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Do 20.11.2008 22:01
Titel

Antworten mit Zitat Zum Seitenanfang

lol ich lach mich schlapp...

Ich hatte das natürlich auch schon ausprobiert, kp warum aber hab es jetzt nochmal geändert - allerdings im notepad editor und nicht in dreamweaver - und siehe da es funzt ...

Danke Flaming Art !
  View user's profile Private Nachricht senden
Peal
Threadersteller

Dabei seit: 02.12.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 08.12.2008 11:19
Titel

Antworten mit Zitat Zum Seitenanfang

Hmm jetzt klapt es wieder nicht, trotz UTF-8 Format.

Nehme ich in Flash "Tahoma" als Geräteschriftart so klappt es Fabelhaft.
Aber mit Antialaising für die Lesbarkeit oder allen anderen Optionen, werden Umlaute wieder nicht dargestellt.

Das ist jetzt problematisch geworden, da mein Kunde nun anstatt Tahoma, Frutiger Condenced haben will und das ist keine "Geräte Schriftart" sie wird dementsprechend total "verpixelt" dargestellt.

Weiss jemand warum ?
Ist in Flash CS3 und in CS4 so ...


Zuletzt bearbeitet von Peal am Mo 08.12.2008 11:19, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
DesignKater

Dabei seit: 26.06.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 08.12.2008 11:39
Titel

Antworten mit Zitat Zum Seitenanfang

Vielleicht hilft es ja die Schriften einzubetten.
  View user's profile Private Nachricht senden
Peal
Threadersteller

Dabei seit: 02.12.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 08.12.2008 11:54
Titel

Antworten mit Zitat Zum Seitenanfang

Wie bette ich die Schriften ein ?

ich habe ja schon die Umlaute "äöüÄÖÜ" eingefügt, aber anstatt eines "ü" kommt ein kleines b und anstatt eines "ä" ein komisches A mit langen strichen nach unten ...


Zuletzt bearbeitet von Peal am Mo 08.12.2008 11:58, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
l'Audiophile

Dabei seit: 16.09.2004
Ort: Berlin
Alter: 43
Geschlecht: Männlich
Verfasst Mo 08.12.2008 12:07
Titel

Antworten mit Zitat Zum Seitenanfang


  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Peal
Threadersteller

Dabei seit: 02.12.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 08.12.2008 12:11
Titel

Antworten mit Zitat Zum Seitenanfang

hoe ?

Der Butten "Einbetten" ist doch für Umlaute und Sonderzeichen, wie soll man da ne gesammte Schriftart einbetten ?
Wie gesagt ich habe dort schon die Umlaute reingeschrieben ...

ich bin in flash cs4 und da heisst der butten "Zeicheneinbettung"

Aber vielen Dank für die Hilfe- schon mal !


______________________________
Lösung:

Code:
system.useCodepage = true;

in den Hauptfilm!


Zuletzt bearbeitet von Peal am Mo 08.12.2008 13:45, insgesamt 3-mal bearbeitet
  View user's profile Private Nachricht senden
 
Ähnliche Themen einlesen von xml dateien in flash
XML-Datei in Flash einlesen
einlesen von socket(stream) in flash????
HILFE! Textdatei in Flash MX einlesen
txt.-Datei in Flash einlesen lassen
Flash CS3 - Bilder aus Verzeichnis einlesen
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Multimedia


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.