Willkommen auf dem Portal für Mediengestalter
|
|
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 ! |
|
|
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
|
|
|
|
|
phihochzwei
Moderator
Dabei seit: 08.06.2006
Ort: Mülheim an der Ruhr
Alter: 46
Geschlecht:
|
Verfasst Do 20.11.2008 21:42
Titel Re: XML in Flash einlesen - Umlaute verschwinden ! |
|
|
Code: | <?xml version="1.0" encoding="UTF-8"?> |
|
|
|
|
|
Anzeige
|
|
|
Peal
Threadersteller
Dabei seit: 02.12.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Do 20.11.2008 22:01
Titel
|
|
|
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 !
|
|
|
|
|
Peal
Threadersteller
Dabei seit: 02.12.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mo 08.12.2008 11:19
Titel
|
|
|
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
|
|
|
|
|
DesignKater
Dabei seit: 26.06.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mo 08.12.2008 11:39
Titel
|
|
|
Vielleicht hilft es ja die Schriften einzubetten.
|
|
|
|
|
Peal
Threadersteller
Dabei seit: 02.12.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mo 08.12.2008 11:54
Titel
|
|
|
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
|
|
|
|
|
l'Audiophile
Dabei seit: 16.09.2004
Ort: Berlin
Alter: 43
Geschlecht:
|
Verfasst Mo 08.12.2008 12:07
Titel
|
|
|
|
|
|
|
|
Peal
Threadersteller
Dabei seit: 02.12.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mo 08.12.2008 12:11
Titel
|
|
|
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
|
|
|
|
|
|
|
|
Ä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
|
|
|
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.
|
|