Wie gut unterstützt Ihre Sprache Unicode in der Praxis?

7

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?

    
Denis de Bernardy 09.06.2011, 00:44
quelle

6 Antworten

7

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.

    
Thomas Wouters 09.06.2011, 00:53
quelle
6

Perl hat eine ausgezeichnete Unicode-Unterstützung. Sie müssen wissen, wie man richtig verwendet, aber ich finde nie eine Sprache, die bessere Unicodeunterstützung als Perl hat, besonders jetzt mit perl5.14.

    
jm666 09.06.2011 00:53
quelle
3

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.

    
Ryan Culpepper 09.06.2011 02:47
quelle
2

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.

    
Mike Ivanov 09.06.2011 00:53
quelle
2

Lisps haben eine starke Unterstützung für Unicode. Alle modernen populären Lisps (SBCL, Clozure CL, clisp) verwenden UTF-32 / UCS-4 für Strings und unterstützen UTF-8 als externes Format.

    
dmitry_vk 09.06.2011 02:44
quelle
1

Ruby-Beispiele:

%Vor%

Tatsächlich wird die Großschreibung für nicht-ascii Zeichen nicht unterstützt, mit Grund.

    
steenslag 09.06.2011 08:49
quelle

Tags und Links