Heutzutage verwenden mehr Sprachen Unicode, was eine gute Sache ist. Aber es birgt auch eine Gefahr. In der Vergangenheit gab es Probleme zwischen 1 und 1 und 0 und 0 zu unterscheiden. Aber jetzt haben wir eine komplett neue Reihe ähnlicher Zeichen.
Zum Beispiel:
%Vor%Mit diesen ist es nicht so schwer, einige sehr schwer zu findende Bugs zu erstellen.
Bei meiner Arbeit haben wir uns entschieden, mit den ANSI-Zeichen für Identifikatoren zu bleiben. Gibt es jemanden da draußen, der Unicode-Identifikatoren verwendet und was sind die Erfahrungen?
Neben den von Ihnen erwähnten ähnlichen Zeichenfehlern und den technischen Problemen, die bei Verwendung verschiedener Editoren auftreten können (w / BOM, wo / BOM, verschiedene Codierungen in der gleichen Datei durch Kopieren einfügen, was nur ein Problem ist, wenn tatsächlich Zeichen vorhanden sind kann nicht in ASCII und so weiter codiert werden), finde ich es nicht wert, Unicode-Zeichen in Bezeichnern zu verwenden. Englisch ist zur lingua franca der Entwicklung geworden und Sie sollten beim Schreiben von Code daran festhalten.
Dies gilt insbesondere für Code, der von jedem Entwickler irgendwo auf der Welt gesehen werden kann (Open Source oder Code, der zusammen mit dem Produkt verkauft wird).
Ich würde auch empfehlen, Ascii für Bezeichner zu verwenden. Kommentare können in einer nicht-englischen Sprache bleiben, wenn der Editor / IDE / Compiler usw. alle lokal bekannt und für die Verwendung der gleichen Codierung eingerichtet ist.
Darüber hinaus ändern einige Groß- und Kleinschreibungssprachen die Kennungen vor der Verwendung in Kleinbuchstaben, was zu Problemen führt, wenn das aktive Gebietsschema des Systems türkisch oder aserbaidschanisch ist. hier finden Sie weitere Informationen zum Problem mit dem türkischen Gebietsschema . Ich weiß, dass PHP dies tut, und es hat einen lange bestehenden Fehler .
Dieses Problem ist auch in jeder Software vorhanden, die Zeichenfolgen mit türkischen Sprachumgebungen vergleicht, nicht nur mit den Sprachimplementierungen selbst, um nur darauf hinzuweisen. Es verursacht viele Kopfschmerzen
Das hängt von der Sprache ab, die Sie verwenden. In Python zum Beispiel ist es einfacher für mich, an Unicode zu bleiben, da meine Anwendungen in mehreren Sprachen funktionieren müssen. Wenn ich also eine Datei von jemandem (etwas) bekomme, den ich nicht kenne, nehme ich Latin-1 an und übersetze es in Unicode.
Funktioniert für mich, wie ich in Lateinamerika bin.
Eigentlich, sobald das Everything ausgebügelt ist, wird das Ganze zu einer glatten Fahrt.
Natürlich hängt das von der Sprache der Wahl ab.
Ich denke, es ist keine gute Idee, den gesamten ANSI-Zeichensatz für Bezeichner zu verwenden. Unabhängig von der ANSI-Codepage, auf der Sie gerade arbeiten, enthält Ihre ANSI-Codepage Zeichen, die auf anderen ANSI-Codepages nicht enthalten sind. Ich empfehle daher, bei ASCII zu bleiben, keine Zeichencodes höher als 127.
In Experimenten habe ich einen größeren Bereich von ANSI-Zeichen als nur ASCII verwendet, sogar in Bezeichnern. Einige Compiler haben es akzeptiert. Einige IDEs benötigten Optionen für Schriftarten, die die Zeichen anzeigen konnten. Aber ich empfehle es nicht für den praktischen Gebrauch.
Nun zum Unterschied zwischen ANSI-Codepages und Unicode.
In Experimenten habe ich Quelldateien in Unicode gespeichert und Unicode-Zeichen in Bezeichnern verwendet. Einige Compiler haben es akzeptiert. Aber ich empfehle es immer noch nicht für den praktischen Gebrauch.
Manchmal habe ich Quelldateien in Unicode gespeichert und in einigen Strings Escapesequenzen verwendet, um Unicode-Zeichenwerte darzustellen. Dies ist eine wichtige Übung und ich empfehle es sehr. Ich musste dies insbesondere dann tun, wenn andere Programmierer ANSI-Zeichen in ihren Strings verwendeten und sich ihre ANSI-Codepages von anderen ANSI-Codepages unterschieden, sodass die Strings beschädigt waren und Kompilierungsfehler oder fehlerhafte Ergebnisse verursachten. Die Lösung hierfür besteht in der Verwendung von Unicode-Escape-Sequenzen.
Ich habe noch nie Unicode für Bezeichner verwendet. Aber was mir in den Sinn kommt, ist, dass Python Unicode-IDs in Version 3 erlaubt: PEP 3131 .
Eine weitere Sprache, die Unicode ausgiebig nutzt, ist Fortress .
Auch wenn Sie sich entschließen, Unicode nicht zu verwenden, tritt das Problem wieder auf, wenn Sie eine Bibliothek verwenden, die dies tut. Also musst du bis zu einem gewissen Grad damit leben.
Meine Erfahrung mit der Verwendung von Unicode in C # -Quelldateien war katastrophal, obwohl es Japanisch war (also gab es nichts, was mit einem "i" verwechselt werden konnte). Source Safe mag Unicode nicht, und wenn Sie manuell beschädigte Quelldateien in Word reparieren, wissen Sie, dass etwas nicht stimmt.
Ich denke, Ihre ANSI-Richtlinie ist ausgezeichnet. Ich kann keinen Grund wirklich sehen, warum das nicht lebensfähig wäre (solange die meisten Ihrer Entwickler Englisch sind, und selbst wenn sie nicht die Welt sind, ist der ANSI-Zeichensatz gewöhnt).