Ich schaue mir neue Sprachen an, eine Art von Sehnsucht nach einem, bei dem ich mich nicht mehr um Charset-Probleme unter übermäßigen Mengen anderer Niggles kümmern muss, die ich mit PHP für ein neues Projekt habe.
Ich tendiere dazu, Java zu weitschweifig und chaotisch zu finden, und mein Wunsch, Windows mit einer 6-Fuß-Stange nicht zu berühren, neigt dazu, .Net auszuschließen. Das lässt im Wesentlichen alles andere übrig - außer PHP, C und C ++ (die letzten beiden, von denen ich weiß, dass sie unordentlich werden, unabhängig von der ICU-Bibliothek).
Ich habe einige Sprachen kurz aufgelistet, nämlich Ruby (liebte die Mixins), Python, Lisp und Javascript (node.js). Allerdings komme ich sehr inkonsistent < a href="https://stackoverflow.com/questions/1416215/which-programming-languages-were-designed-with-unicode-support-from-the-beginning"> information auf Unicode Unterstützung und ich fürchte mich davor (Mangel an Zeit ...), um jeden einzelnen von ihnen bis zu dem Punkt zu lernen, an dem ich es sicher brechen kann, um es auszuschließen.
Soweit ich es verstanden habe, scheint Python 3 es zu haben . Wie auch Ruby 1.9. Lisp nicht unbedingt . Javascript vermutlich.
Es gibt wohl mehr als Unicode-Unterstützung für eine Sprache, aber nach meiner Erfahrung wird es zu einem großen Nachteil, wenn es um Locale geht.
Ich verstehe auch, dass die Frage etwas subjektiv ist. (Bitte schließen Sie es nicht aus diesem Grund: Ich verlinke tatsächlich zu mehreren SO-Threads, die ich als unbefriedigend empfand.) Aber ... wie gut unterstützen sie als Benutzer einer dieser Sprachen Unicode in der Praxis?
Pythons Unicode-Unterstützung hat sich in 3.x nicht wirklich geändert. Die Unicode -Support in Python war seit Python 2.x ziemlich gleich, was den separaten unicode
-Typ und die Encoding-Behandlung einführte. Was Python 3.x ändert, ist, dass Unicode der einzige String-Typ wird (und in str
umbenannt wird), während 2.x bytestrings ( str
, "..."
) und Unicode-Zeichenfolgen ( unicode
, u"..."
) die sich oft, aber nicht immer, nicht ganz vermischen. (Ihnen zu erlauben, zu mischen war ein Versuch, den Übergang von Bytestrings zu Unicode einfacher zu machen, aber es stellte sich als Fehler heraus.) Alles in allem ist Pythons Unicode-Unterstützung ziemlich gut, Fehler in Python 2.x ungeachtet. Es gibt Unicode-Literale mit numerischen und benannten Escapes, dekodierende Deklarationen für Nicht-ASCII-Zeichen in Unicode-Literalen, automatische Kodierung / Dekodierung durch das codecs
-Modul, Unicode-Unterstützung in vielen Bibliotheken (wie der reguläre Ausdruck und DB-API-Module) und eine eingebaute Unicode-Datenbank.
Das heißt, Sie noch müssen über Codierungen Bescheid wissen, um Text korrekt zu behandeln. Ihr Programm wird Bytes in irgendeiner Kodierung empfangen (sei es von Dateien, von Umgebungsvariablen oder durch andere Eingabe) und sie müssen in dieser Kodierung interpretiert werden. Wenn Sie die Kodierung nicht kennen (und sie nicht aus den Daten bestimmen können, wie in HTML oder XML), können Sie die Daten wirklich nur als Bytes verarbeiten. Wenn Sie die Kodierung kennen, können Sie mit Python meist transparent umgehen.
Racket (im Lisp / Scheme Camp) hat eine gute Unicode-Unterstützung. Racket unterscheidet Zeichenfolgen (geschrieben "abc"
) von Bytezeichenfolgen (geschrieben #"abc"
). Zeichenketten bestehen aus Unicode-Zeichen und haben alle Unicode-erkennenden Zeichenfolgenoperationen, die man erwarten würde (Vergleich, Fallfaltung usw.). Standardmäßig verwendet Racket UTF-8 für Zeichenfolgen-E / A (einschließlich der Kodierung von Quelldateien), unterstützt aber auch die Konvertierung von und zu anderen Kodierungen. Das GUI-Toolkit arbeitet mit Unicode. Also, reguläre Ausdrücke.
Aus meiner persönlichen Erfahrung, Ruby 1.9.2 behandelt Unicode intern ziemlich gut, mit Ausnahme einiger seltsamer Bereiche wie upcase / downcase / capitalize-Methoden für die String-Klasse. Ich muss sie für alle meine Rails-Anwendungen überschreiben.
Ruby-Beispiele:
%Vor%Tatsächlich wird die Großschreibung für nicht-ascii Zeichen nicht unterstützt, mit Grund.