Ich habe das Gefühl, dass Sie oft nicht wirklich auswählen, in welchem Format Ihr Code vorliegt. Ich meine, die meisten meiner Tools in der Vergangenheit haben sich für mich entschieden. Oder ich habe nicht wirklich darüber nachgedacht. Ich habe neulich TextPad unter Windows verwendet und als ich eine Datei speicherte, wurde ich über ASCII, UTF-8/16, Unicode usw. usw. informiert.
Ich gehe davon aus, dass fast der gesamte geschriebene Code ASCII ist, aber warum sollte es ASCII sein? Sollten wir jetzt tatsächlich UTF-8-Dateien für den Quellcode verwenden und warum? Ich würde mir vorstellen, dass dies in mehrsprachigen Teams nützlich sein könnte. Gibt es Standards dafür, wie mehrsprachige Teams Variablen / Funktionen / etc benennen?
Antworten:
Die Wahl liegt nicht zwischen ASCII und UTF-8. ASCII ist eine 7-Bit-Codierung, die von UTF-8 ersetzt wird. Jeder gültige ASCII-Text ist auch für UTF-8 gültig. Die Probleme treten auf, wenn Sie Nicht-ASCII-Zeichen verwenden. Für diese müssen Sie zwischen UTF-8, UTF-16, UTF-32 und verschiedenen 8-Bit-Codierungen (ISO-xxxx usw.) wählen.
Die beste Lösung besteht darin, sich an einen strengen ASCII-Zeichensatz zu halten, dh keine Nicht-ASCII-Zeichen in Ihrem Code zu verwenden. Die meisten Programmiersprachen bieten Möglichkeiten, Nicht-ASCII-Zeichen mit ASCII-Zeichen auszudrücken, z. B.
"\u1234"
um den Unicode-Codepunkt bei 1234 anzugeben. Vermeiden Sie insbesondere die Verwendung von Nicht-ASCII-Zeichen für Bezeichner. Selbst wenn sie richtig funktionieren, werden Sie von Personen, die ein anderes Tastaturlayout verwenden, dafür verflucht, dass sie diese Zeichen eingeben.Wenn Sie Nicht-ASCII-Zeichen nicht vermeiden können, ist UTF-8 die beste Wahl. Im Gegensatz zu UTF-16 und UTF-32 handelt es sich um eine Obermenge von ASCII, was bedeutet, dass jeder, der es mit der falschen Codierung öffnet, zumindest das meiste davon richtig macht. Im Gegensatz zu 8-Bit-Codepages kann es eindeutig jedes Zeichen codieren, das Sie jemals benötigen werden, und es ist auf jedem System verfügbar, unabhängig vom Gebietsschema.
Und dann haben Sie die Codierung, die Ihr Code verarbeitet. Dies muss nicht mit der Codierung Ihrer Quelldatei identisch sein. Zum Beispiel kann ich PHP leicht in UTF-8 schreiben, aber seine interne Multibyte-Codierung auf beispielsweise Latin-1 setzen; Da sich der PHP-Parser überhaupt nicht mit Codierungen befasst, sondern nur Byte-Sequenzen liest, werden meine UTF-8-String-Literale als Latin-1 falsch interpretiert. Wenn ich diese Zeichenfolgen auf einem UTF-8-Terminal ausgebe, werden keine Unterschiede angezeigt, aber Zeichenfolgenlängen und andere Multibyte-Operationen (z. B.
substr
) führen zu falschen Ergebnissen.Meine Faustregel lautet, UTF-8 für alles zu verwenden. Nur wenn Sie sich unbedingt mit anderen Codierungen befassen müssen, konvertieren Sie so früh wie möglich zu UTF-8 und so spät wie möglich von UTF-8.
quelle
Die meisten IDEs speichern standardmäßig mit UTF-8-Codierung, und Sie sollten mit ziemlicher Sicherheit UTF-8 anstelle von ASCII wählen, wenn Sie die Option erhalten. Dies stellt sicher, dass Sie nicht auf seltsame Probleme mit dem Internationalisierungscode stoßen.
quelle
Es ist sehr schön, einfachen Text in Anführungszeichen oder Zeichen im Quellcode eingeben zu können und das tatsächliche Zeichen zu sehen. Zum Beispiel sind das pi-Symbol 'π' oder das Ideogramm '𠀊' viel schöner als das Äquivalent '\ u3c0' für pi und L '\ u2000A' für das Ideogramm.
Es ist möglich, diese Zeichen wie ASCII-Zeichen in einem anständigen Editor direkt in den Quellcode einzugeben und / oder zu kopieren und einzufügen.
Ich finde konkrete Beispiele hilfreich, um Dinge zu konzipieren und zu verstehen, die Wortbeschreibungen manchmal nicht nach Hause zu bringen scheinen. Konzeptualisieren Sie in den Quellcode eingegebene Unicode-Zeichenkonstanten, z. B. das folgende kurze Beispielcode-Snippet:
Das ASCII-Tilde-Zeichen '~' kann in einer ASCII- oder UTF-8-Quelldatei gespeichert werden, die Unicode-Zeichen können jedoch nicht in ASCII-Form gespeichert werden. Das PI-Symbol 'π' ist der Unicode-Codepunkt 0x3c0 und kann in UTF-8-Form als Zwei-Byte-Wert 0xcf, 0x80 gespeichert werden. Die Ideogramme an den Unicode-Codepunkten 0x2000a und 0x2893d erfordern 4-Byte-UTF-8-Sequenzen.
Damit diese Zeichen ihre beabsichtigten Werte beibehalten und der Compiler sie wie beabsichtigt interpretieren kann, muss der Quellcode in einem Format gespeichert werden, das den Unicode-Zeichensatz unterstützt, z. B. UTF-8 oder UTF-16. Wenn es als UTF-8 gespeichert wird, versteht und interpretiert ein anständiger Compiler die Werte wie beabsichtigt, und ein anständiger Editor lädt die Zeichen und zeigt sie ordnungsgemäß an.
Wie andere bereits betont haben, führt das Speichern als UTF-8 zu einer Datei, die sich nicht vom Speichern einer ASCII-Datei unterscheidet, da UTF- 8 ist so konzipiert, dass ASCII im ASCII-Zeichenbereich überlappt. Sobald Sie ein Zeichen in Ihren Quellcode eingeben, das außerhalb des ASCII-Bereichs liegt, werden Sie von einem anständigen Editor darüber informiert, dass Sie eine Codierung auswählen müssen, die zum Speichern der Datei verwendet werden soll. UTF-8 ist eine gute Wahl, da es ASCII unverändert verarbeiten kann und praktisch jedes andere Zeichen in Ihrer Entwicklungsumgebung unterstützt wird.
quelle