Bug im Syntaxhighlighting?

Gast #1527649
Lesenswert?
• ▲
▼
In den folgenden Zeilen eines Anhangs wird die if-Zeile fälschlich in 
der Farbe eines Kommentars angezeigt.

    // Auf ANSI ESCAPE SEQUENZ pr�fen
    if (byte == 0x1B) // ESC?

Beispiel aus Beitrag "Re: Daten vom UART am LCD ausgeben"

Verwirrt das Sonderzeichen in "pr�fen" den Syntaxparser?
Gast #1527675
Lesenswert?
• ▲
▼
Flo schrieb:
> Außerdem sollten Umlaute in einem Softwareprogramm sowieso nicht
> vorkommen, da sie länderspezifisch sind und die Programmierumgebung das
> kennen muss.

Dafür gibts erstens seit vielen Jahren einen gemeinsamen Standard 
(Unicode) und zweitens kann das jeder anständige(tm) Compiler (richtig) 
interpretieren. Wenn eine 'Programmierumgebung' das nicht kann, dann 
würde zumindest ich schwer über einen Wechsel selbiger nachdenken, das 
wäre ja sonst geradezu steinzeitlich.

Nix für ungut
Gast #1527960
Lesenswert?
• ▲
▼
Uhu Uhuhu schrieb:
> Und ändert das auch nur ein Jota daran, daß der Syntaxhighlighter hier
> im Forum Probleme deswegen bekommt?

Nope, nicht mal ein ε, brauchts auch nicht.

> Was bitte hat der mit der benutzten 'Programmierumgebung' zu tun?

Nix. Du hast den Kontext falsch verstanden (oder nicht gelesen). Dort 
ging es um die Frage, ob man in Quellcode überhaupt Sonderzeichen 
antreffen ★kann★ (respektive erwarten muss, dass welche kommen könnten) 
oder ob die dort grundsätzlich nix verloren haben, weil wir selbigen eh 
in 7bit-ASCII verfassen. Und da Sonderzeichen vorkommen ★können★ 
(Unicode sei Dank sogar plattformübergreifend einheitlich), heisst das 
automagisch auch, dass auch der Parser des Syntaxhighlighters damit 
umgehen können sollte.

..sofern obiges Problem überhaupt an jenem liegt. Könnte prinzipiell 
auch dessen Lexer oder Compiler sein, der die Grätsche macht. So oder 
so: es sollte nicht auftreten, und nur darum gehts :-)
Gast #1528035
Lesenswert?
• ▲
▼
> (Unicode sei Dank sogar plattformübergreifend einheitlich)

Leider nicht, wie das fragliche Programm beweist: Es scheint in der
Windows-üblichen Latin1-Codierung verfasst worden zu sein.

Das Sonderzeichen scheint aber nicht der Grund für den Fehler zu sein.
Weiter unten im Code gibt es eine ähnliche Konstellation, die richtig
gehighlightet wird:
1
      // ohne Kontrolle auf G�ltigkeit
2
      data |= byte;
Gast #1528074
Lesenswert?
• ▲
▼
Da die Windows-Umlaute auf einer UTF-8-codierten Webseite ohnehin falsch
dargestellt werden, wäre es evtl. sinnvoll, alle hochgeladenen Quell-
codedateien serverseitig in UTF-8 zu konvertieren. Mit dem file-Befehl
könnte festgestellt werden, wann eine Konvertierung erforderlich ist. Er
gibt eine der drei Meldungen

  ISO-8859 ... text ...
  UTF-8 ... text ...
  ASCII ... text ...

aus, je nachdem, ob die Datei Windows-Umlaute, UTF-8-Umlaute oder nur
ASCII-Zeichen enthält.

Damit wäre gleich beide Probleme gelöst.
Gast #1528363
Lesenswert?
• ▲
▼
Der Quellcode im genannten Anhang hat das ? drin, weil ich den Text aus 
Beitrag "Re: Daten vom UART am LCD ausgeben" per Copy&Paste ins 
AVR Studio übertragen hatte. Dabei entstanden die ? aus den Umlauten. 
Dann in AVR Studio die Quelldatei gespeichert hatte. Dann die Quelldatei 
hochgeladen hatte. In meinem Browser (Seamonkey) ist Zeichensatz Unicode 
(UTF-8) eingestellt, falls das beim Copy&Paste oder Hochladen relevant 
ist.
#1528420
Lesenswert?
• ▲
▼
g457 schrieb:
>> Was bitte hat der mit der benutzten 'Programmierumgebung' zu tun?
>
> Nix. Du hast den Kontext falsch verstanden (oder nicht gelesen). Dort
> ging es um die Frage, ob man in Quellcode überhaupt Sonderzeichen
> antreffen ★kann★

Und was bitte hat das mit dem Thema dieses Threads zu tun?
Gast #1528457
Lesenswert?
• ▲
▼
yalu schrieb:
> Da die Windows-Umlaute auf einer UTF-8-codierten Webseite ohnehin falsch
> dargestellt werden, wäre es evtl. sinnvoll, alle hochgeladenen Quell-
> codedateien serverseitig in UTF-8 zu konvertieren.

Dazu müsste man aber angeben, aus welcher Kodierung die Originaldaten 
kommen. latin1 (iso8859-1) z.B. sieht im Wesentlichen genauso aus, wie 
latin9 (iso8859-15), nur statt ¤ ist da ein €.
Es unterscheiden sich ja nur die Zeichenzuordnungen.
Gast #1529296
Lesenswert?
• ▲
▼
Sven P. schrieb:
> Dazu müsste man aber angeben, aus welcher Kodierung die Originaldaten
> kommen.

Das geht leider nicht. Einmal davon abgesehen, dass es etwas nervig ist,
jedesmal die Zeichenkodierung mit anzugeben, wissen insbesondere die
Benutzer der Zeichenkodierung *-1252 oft gar nicht, dass sie selbige
benutzen (Wer weiß, wofür der Stern steht, braucht sich übrigens nicht
angesprochen und damit auch nicht gekränkt zu fühlen).

Aber eine automatische Erkennung der Kodierung ist doch ok. Auch wenn
sie nicht 100%ig zuverlässig ist, funktioniert sie bei gewöhnlichem
Text, wie er auch in C-Kommentaren zu finden ist, fast immer. Und wenn
sie einmal versagt, ist das auch nicht tragisch.

> latin1 (iso8859-1) z.B. sieht im Wesentlichen genauso aus, wie latin9
> (iso8859-15), nur statt ¤ ist da ein €.

Man macht beim Auftreten dieses Zeichencodes in den allerseltensten
Fällen einen Fehler, wenn man ihn als '€' interpretiert.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.