Tach!
Ein Eurozeichen besteht aus 3 Bytes mit den Wertigkeiten E2 82 AC.
in UTF-8 codiert, ja. In anderen Textcodierungen sieht es wieder völlig anders aus.
Wenn ich jedoch mit diesen Wertigkeiten die Bytes einzeln erzeuge und mit
+=
aneinanderhänge erkennt JS das nicht als Eurozeichen sondern als 3 einzelne Zeichen.
Wenn man das als \xE2\x82\xAC notiert, sind das keine Bytes sondern Zeichen.
Korrekt. Weil Javascript seine eigenen interne Darstellung von Zeichen hat (Marc sagte neulich was von UTF-16, ich weiß es nicht besser). An die interne Codierung, die JS hier verwendet, kommst du aber meines Wissens nicht dran.
Die interne Kodierung ist im Prinzip nicht weiter relevant. Man kommt damit üblicherweise nicht in Berührung. Vereinfacht kann man sagen, dass Javascripts String-Philosophie zeichenorientiert ist. Es arbeitet mit dem Zeichensatz Unicode und Kodierungen spielen normalerweise keine Rolle. Natürlich müssen die Zeichen in der Physik irgendwie kodiert werden, und es gibt auch einige Funktionen, die mit Kodierungen umgehen. Doch für das allgemeine Arbeiten mit Strings ist das nicht erforderlich.
Das versuchte ich Emil/hotti/pl schon mehrfach zu erklären, aber er weigert sich anscheinend beharrlich das anzunehmen und scheitert regelmäßig daran, wenn er sein Weltbild von Bytes auf Javascript überzustülpen versucht.
Was muss ich tun daß JS die aneinandergeängten Bytes als ein Zeichen, also das Eurozeichen erkennt?
Nicht auf Byte-Ebene arbeiten, sondern ein einzelnes Zeichen mit dem Code 0x20AC erzeugen.
Wenn du es unbedingt von der Byte-Ebene aus bearbeiten willst, kannst du die Byte-Sequenz auch selbst zum korrespondierenden Zeichencode verrechnen.
Eigentlich findet Zeichenkodierung außerhalb von Javascript statt. Der HTML-Parser dekodiert bereits den Datenstrom zu Zeichen, bevor es an Javascript übergeben wird.
Wenn man unbedingt mit Zahlen arbeiten möchte, gibt es String.fromCharCode()
und String.fromCodePoint()
zum Umwandeln. Aber das sind eben CodePoints, keine Bytes.
dedlfix.