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?
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.
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
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?
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 :-)
> (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; |
Wenn man das Windows-'ü' durch ein UTF-8-'ü' ersetzt, wird auch der andere Code-Abschnitt richtig dargestellt, s. Anhang.
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.
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.
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?
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.
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.
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.
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. :-)
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.
1 | begin
|
2 | Iconv.conv('utf-8', 'utf-8', s) |
3 | rescue Iconv::IllegalSequence |
4 | Iconv.conv('utf-8', 'iso-8859-15', s) |
5 | end
|
:
Wiederhergestellt durch Admin
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.