www.mikrocontroller.net

Forum: www.mikrocontroller.net Bug im Syntaxhighlighting?


Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mach halt mal aus dem ü n ue.

Außerdem sollten Umlaute in einem Softwareprogramm sowieso nicht 
vorkommen, da sie länderspezifisch sind und die Programmierumgebung das 
kennen muss.

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und ändert das auch nur ein Jota daran, daß der Syntaxhighlighter hier 
im Forum Probleme deswegen bekommt?

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

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
      // ohne Kontrolle auf G�ltigkeit
      data |= byte;

Autor: yalu (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man das Windows-'ü' durch ein UTF-8-'ü' ersetzt, wird auch der 
andere Code-Abschnitt richtig dargestellt, s. Anhang.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss mich korrigieren (man darf ab einem gewissen Alter nicht aus dem 
Gedächnis schreiben). Die Umlaute des Copy&Paste-Textes sind im AVR 
Studio immer noch vorhanden und noch nicht in ? gewandelt.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
yalu schrieb:

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

Man macht noch weniger einen Fehler, wenn man ihn als ¤ interpretiert,
denn das ist das generische Währungssymbol. :-)

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem ist behoben. Wenn der Zeichensatz kein gültiges UTF-8 ist, dann 
wird angenommen dass er ISO-8859-15 ist und nach UTF-8 konvertiert.
begin
  Iconv.conv('utf-8', 'utf-8', s)
rescue Iconv::IllegalSequence
  Iconv.conv('utf-8', 'iso-8859-15', s)
end

: Wiederhergestellt durch Admin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.