Umlaute
Pete
- javascript
Hallo,
ich bräuchte mal eure Hilfe in Bezug auf Umlaute:
Ich lese eine String aus einer js-Datei mit Umlauten ein: "Überschrift" und speichere diesen String in einer anderen Variablen. Lasse ich mir nun den String mit alert anzeigen, so bekomme ich nur folgendes:
†berschrift
Wenn ich direkt alert("Überschrift") anzeigen lasse, bekomme
ich
berschrift
also ohne das Ü
Was ist passiert? Warum macht der aus Ü ein † ? Ich kann jetzt nämlich nicht mehr mein Funktion drüber laufen lassen, die eigentlich alle umlaute ersetzt.
Pete
Hi,
†berschrift
versuch mal Unicode:
alert("2: unicode characters: \u00e4\u00f6\u00fc\u00df");
Gruesse, Joachim
Hi,
†berschrift
versuch mal Unicode:
alert("2: unicode characters: \u00e4\u00f6\u00fc\u00df");
Okay, ich bekomme die normalen Umlaute. Und?
Bevor ich den String in das HTML-Dockument schreibe durchläuft es folgende Funktion:
function deleteUmlaute(curText) {
if (curText == "") return "";
var result = curText;
alert("deleteUmlaute: "+curText);
result=result.replace(/\u00fc/g, "ü");
result=result.replace(/\u00f6/g, "ö");
result=result.replace(/\u00e4/g, "ä");
result=result.replace(/\u00dc/g, "Ü");
result=result.replace(/\u00d6/g, "Ö");
result=result.replace(/\u00c4/g, "Ä");
result=result.replace(/\u00df/g, "ß");
result=result.replace(/ü/g, "ü");
result=result.replace(/ö/g, "ö");
result=result.replace(/ä/g, "ä");
result=result.replace(/Ü/g, "Ü");
result=result.replace(/Ö/g, "Ö");
result=result.replace(/Ä/g, "Ä");
result=result.replace(/ß/g, "ß");
alert(result);
return result;
}
Dennoch bekomme ich dieses merkwürdige †berschrift. D.h. in meinen Augen, dass der String irgendwo so verändert wurde, dass er durch obige Funktion nicht mehr gefunden wird. Aber an welcher Stelle: Beim Lesen aus der js.Datei, beim übertragen in eine Variable? Woanders?
Hilfe.......?
Pete
Inzwischen habe ich rausgefunden, das der Code der da hingeschrieben wird die Entities für ISO 8859-1 sind.
Ich weiß aber noch nicht warum.
Pete
Hi,
Inzwischen habe ich rausgefunden, das der Code der da hingeschrieben wird die Entities für ISO 8859-1 sind.
Falsch. Die Entities beziehen sich auf den Zeichensatz des Dokumentes. Und der ist bei HTML (egal, welche Kodierung benutzt wird) immer ISO 10646, sprich: Unicode.
Allerdings sind die ersten 256 Zeichen von Unicode (also die Zeichen mit den Nummern 0x00 bis 0xFF) identisch mit den Zeichen aus ISO-8859-1.
cu,
Andreas
Falsch. Die Entities beziehen sich auf den Zeichensatz des Dokumentes. Und der ist bei HTML (egal, welche Kodierung benutzt wird) immer ISO 10646, sprich: Unicode.
Allerdings sind die ersten 256 Zeichen von Unicode (also die Zeichen mit den Nummern 0x00 bis 0xFF) identisch mit den Zeichen aus ISO-8859-1.
Aha...(habe ich das jetzt wirklich verstanden)
Also, was ich jetz versucht habe ist folgendes:
var i=0
switch(text.charCodeAt(i)) {
case 2440:
//ersetze das Zeichen durch ein Ü
}
Ich durchlaufe den String und tausche alles wieder aus.
Das funktionirt nur nicht. Wenn ich einen Testdurchlauf mache, bekomme ich überall "ü". Also statt ä oder ö, ü, ß bekomme ich ü.
Muss ich das verstehen?
Was kann ich sonst noch tuen. Ich möchte halt in den Strings die Umlaute behalten, da diese später in ein XML-Dokument geschrieben werden.
Pete
Hi,
var i=0
switch(text.charCodeAt(i)) {
case 2440:
//ersetze das Zeichen durch ein Ü
}
Ich durchlaufe den String und tausche alles wieder aus.
Das funktionirt nur nicht. Wenn ich einen Testdurchlauf mache, bekomme ich überall "ü". Also statt ä oder ö, ü, ß bekomme ich ü.
Muss ich das verstehen?
Dann hast Du was falsch gemacht.
Hast Du berücksichtigt, daß nach einem case meist ein break erwünscht ist?
cu,
Andreas
Dann hast Du was falsch gemacht.
Das Gefühl habe ich auch :-(
Hast Du berücksichtigt, daß nach einem case meist ein break erwünscht ist?
Ja habe ich.
Mein Problem ist in diesem Zusammenhang, dass ich mir das Ergebnis irgendwie nicht richtig anzeigen lassen kann.
Testfall wäre z.B:
var test="üäößÄÜÖ"
alert(test) //Hier kommen dan lustige Symbole
alert(replaceUmlaute(test)) //Hier kommt dann nichts mehr in der Anzeige.
Im Programm selbst habe ich dann eine Funktion, die alle Umlaute vor dem darstellen in einem Frame dann wieder erstetzt:
z.B. string.replace(//d004/g,ü);
denn utf-8 code kenne ich jetzt leider nicht und ich bin nicht am meinem Computer.
Sicherheitshalber habe ich dann noch folgende Ersetzung:
string.replace(/ü/g,ü)
Im Normalfall geht das alles. Aber hier jetzt nicht mehr. ICh weiß nicht warum.
Hast jemand noch eine Idee
Pete
cu,
Andreas
Hi,
var test="üäößÄÜÖ"
alert(test) //Hier kommen dan lustige Symbole
alert(replaceUmlaute(test)) //Hier kommt dann nichts mehr in der Anzeige.
Was passiert, wenn Du die Strings ins Dokument schreibst (also ins HTML-Umfeld bringst), statt sie per Javascript-Alert anzeigst?
cu,
Andreas
?So, endlich wieder am eigenen Computer.
?>> Was passiert, wenn Du die Strings ins Dokument schreibst (also ins HTML-Umfeld bringst), statt sie per Javascript-Alert anzeigst?
??
Nichts! :-( Ich bekomme nur 5 Fragezeichen.
Zum Verständnis:
alert(metaElement.childElements[i].text); // Das ist der eigentliche Text: eigentlich ü ä ö Ü Ä Ö, allerdings bekomme ich nur dieses merkwürdige Kauderwelsch.
alert(decode_charFromFile(metaElement.childElements[i].text)); //Hier sollten jetzt Umlaute erzeugt werden. Zu sehen ist kein Zeichen, nicht mal ein komisches
top.content.previewarea.document.write(decode_charFromFile(metaElement.childElements[i].text); //Jetzt raus damit in ein dokument. Zu sehen sind 6 Fragezeichen ??????
debugPanel(decode_charFromFile(metaElement.childElements[i].text)); //Darstellen es Texes in einer textarea ABER HIER KOMMTS JETZT: Ich hatte hier zum Glück einen Fehler gemacht und folgende Fehlermeldung bekommen:
_________________________________________
Error: syntax error
Source File: file:///debug.html?content='%EF%BF%BD%20%EF%BF%BD%20%EF%BF%BD%20%EF%BF%BD%20%EF%BF%BD%20%EF%BF%BD'
Line: 24
Source Code:
<script type="text/javascript">
_________________________________________
Meine decode-Funktion schaut so aus:
function decode_charFromFile(filedata) {
var i=0;
var result = "";
while(i<filedata.length) {
c = filedata.charCodeAt(i);
var replacement = "";
switch (filedata.charCodeAt(i)) {
case 8224:
//alert("8224");
replacement = "Ü";
break;
case 8364:
//alert("8364");
replacement = "Ä";
break;
case 8230:
//alert("8230");
replacement = "Ö";
break;
case 167:
//alert("8230");
replacement = "ß";
break;
case 376:
//alert("376");
replacement = "ü";
break;
case 352:
//alert("352");
replacement = "ä";
break;
case 353:
//alert("353");
replacement = "ö";
break;
default:
replacement = filedata.charAt(i);
break;
}
result += replacement;
i++;
}
//alert("i="+i);
return result;
}
Vielleicht kann mir jetzt jemand helfen? Bitte, bitte, bitte,....
Pete
Ich habe es ?brigens auch mit unescape versucht. Genau(!) die gleichen Ergebnisse!
Pete
hi,
Testfall wäre z.B:
var test="üäößÄÜÖ"
alert(test) //Hier kommen dan lustige Symbole
alert(replaceUmlaute(test)) //Hier kommt dann nichts mehr in der Anzeige.
hast du mal versucht, dir die ergebnisse statt per alert() mal mit document.write() in die seite schreiben zu lassen?
gruß,
wahsaga
gruss Pete,
Bevor ich den String in das HTML-Dockument schreibe durchläuft es
folgende Funktion:function deleteUmlaute(curText) {
if (curText == "") return "";
var result = curText;
alert("deleteUmlaute: "+curText);
result=result.replace(/\u00fc/g, "ü");
..
result=result.replace(/ü/g, "ü");
..
alert(result);
return result;
}
Du beruecksichtigst beim suchen und ersetzen nur unicode-werte
und die sonderzeichen selber - die zu ersetzenden werte koennten
aber auch als dezimale bzw. hexadezimale entities in der quelle
vorkommen.
ist eine dauerbaustelle - aber reinschauen koennte Dir vielleicht
weiterhelfen:
http://www.pseliger.de/testCases/jsApi.String.charCodes.dev.html
by(t)e by(t)e - peterS. - pseliger@gmx.net