Frage

Ich mag einen kanonischen Ort, um Informationen über die Unicode-Unterstützung in verschiedenen Sprachen zu bündeln. Ist es ein Teil der Kernsprache? Ist es in Bibliotheken zur Verfügung gestellt? Ist es überhaupt nicht zur Verfügung? Gibt es eine Ressource beliebte Ressource für Unicode in einer Sprache? Eine Sprache pro Antwort bitte. Auch wenn Sie die Sprache eine Überschrift machen könnten, das würde es leichter zu finden.

Keine korrekte Lösung

Andere Tipps

Perl

Perl verfügt über eine integrierte in Unicode-Unterstützung, meistens. Art. Von Perldoc:

  • perlunitut - Tutorial auf Unicode in Perl. lehrt Weitgehend in absoluten Zahlen über das, was Sie sollten und so weit wie Unicode nicht tun sollten. Abdeckungen Grundlagen.
  • perlunifaq -. Häufig gestellte Fragen zu Unicode in Perl
  • perluniintro - Einführung in Unicode in Perl. Weniger "moralisierend" als perlunitut .
  • perlunicode - Denn wenn Sie unbedingt wissen müssen alles über Unicode und Perl wissen .

Python 3k

Python 3k (oder 3.0 oder 3000) hat neuen Ansatz für den Umgang mit Text (Unicode) und Daten:
Text Vs. Daten anstelle von Unicode Vs. 8-Bit-. Siehe auch Unicode HOWTO .

Java

Das gleiche wie mit .NET, Java verwendet UTF-16 intern: java.lang.String

  

A String stellt eine Zeichenfolge in dem UTF-16-Format, in dem ergänzenden Zeichen sind, dargestellt durch Ersatzpaare (siehe Abschnitt Unicode-Zeichendarstellungen in der Character Klasse für weitere Informationen). Index-Werte beziehen sich Codeeinheiten auf char, so ein ergänzendes Zeichen verwendet zwei Positionen in einer String.

HQ9 +

Der Q-Befehl hat die vollständige Unicode-Unterstützung in den meisten Implementierungen.

Delphi

Delphi 2009 voll unterstützt Unicode. Sie haben die Implementierung von string geändert zu 16-Bit-Unicode-Codierung auf Standard und die meisten Bibliotheken einschließlich der Dritten diejenigen Unicode unterstützen. Siehe Marco Cantù Delphi und Unicode .

Vor Delphi 2009 wurde die Unterstützung für Unicode begrenzt, aber es gab WideChar und WideString die 16-Bit-codierte Zeichenfolge zu speichern. Siehe Unicode in Delphi für weitere Informationen.

Beachten Sie, können Sie immer noch zweisprachige CJKV Anwendung entwickeln, ohne Verwendung von Unicode. Zum Beispiel JIS Shift- Zeichenfolge codiert für japanische Ebene AnsiString Verwendung gespeichert werden können.

Go

Google Programmiersprache Go unterstützt Unicode und arbeitet mit UTF-8.

Python

Python 2 die Klassen str und unicode. str Objekte speichern Bytes, unicode Objekte speichern UTF-16 Zeichen. Die meisten Bibliotheksfunktionen unterstützen beide (z os.listdir('.') eine Liste von str zurückgibt, os.listdir(u'.') gibt eine Liste von unicode Objekte). Beide haben encode und decode Methoden.

Python 3 im Grunde umbenannt unicode str. Der Python 3 entspricht str wäre der Typ bytes sein. bytes hat eine decode und str eine encode Methode. Da Python 3.3 str Objekte intern eine von mehreren Codierungen verwenden, um zu sparen Erinnerung. Für einen Python-Programmierer sieht es immer noch wie eine abstrakte Unicode-Sequenz.

Python unterstützt:

  • Kodierung / Dekodierung
  • Normalisierung
  • einfache Fall Umwandlung und Spaltung auf Leerzeichen
  • Nachschlagen Zeichen durch ihren Namen

Python nicht unterstützt / begrenzte Unterstützung für hat:

  • Sortierungs (haftungsbeschränkt)
  • Sonderfall Conversions, bei denen es keine 1: 1-Zuordnung zwischen Groß- und Kleinschreibung Zeichen
  • reguläre Ausdrücke ( es auf gearbeitet)
  • Text Segmentierung
  • bidirektionalen Text Handhabung

Siehe auch: Die Wahrheit über Unicode in Python

JavaScript

Sieht aus wie vor JS 1.3 gibt es keine Unterstützung für Unicode war. Ab 1,5, UTF-8, UTF-16 und UCS-2 werden unterstützt. Sie können Unicode-Escape-Sequenzen in Strings, regexs und Bezeichner verwenden. Quelle

.NET (C #, VB.NET, ...)

.NET speichert Strings intern als eine Folge von System.Char Objekte. Ein System.Char stellt eine UTF-16 Codeeinheit .

Aus der MSDN-Dokumentation auf System.Char:

  

Das .NET Framework verwendet die Char   Struktur stellen eine Unicode   Charakter. Der Unicode-Standard   identifiziert jedes Unicode-Zeichen mit   eine einzigartige 21-Bit skalare Zahl genannt   Codepunkt und definiert die UTF-16   Kodierungsform, die angibt, wie ein   Codepunkt wird in eine Sequenz codiert   von einem oder mehreren 16-Bit-Werte. Jeder   16-Bit-Wert im Bereich von hexadezimal   0x0000 bis 0xFFFF und gespeichert ist in    Char Struktur.

Weitere Informationen:

Tcl

Tcl Strings haben Sequenzen von Unicode-Zeichen seit Tcl 8.1 (1999 ). Intern werden sie dynamisch zwischen UTF-8 (streng derselben Modifizierte morphed UTF-8 als Java aufgrund des Umgang mit U+00000 Zeichen) und UCS-2 (in Host-Endian und BOM, natürlich). Alle externen Ketten (mit einer Ausnahme), einschließlich denjenigen mit dem verwendeten Betriebssystem zu kommunizieren, sind intern Unicode, bevor sie in transformiert wird, was auch immer Codierung für den Host erforderlich ist (oder wird manuell über einen Kommunikationskanal konfiguriert). Die Ausnahme ist, wenn Daten zwischen zwei Kommunikationskanälen kopiert mit einer gemeinsamen Codierung (und einigen anderen Einschränkungen nicht hier Germane), wo eine direkte Kopie freie binäre Übertragung verwendet wird.

Charaktere außerhalb des BMP sind derzeit nicht entweder intern oder extern behandelt. Dies ist ein bekanntes Problem.

R6RS Schema

erfordert die Implementierung von Unicode 5.1. Alle Saiten sind in 'Unicode-Format'.

Rust

Rust Strings (std::String und &str) gelten immer UTF-8, und verwenden Sie keine Null Terminatoren, und als Ergebnis kann nicht als ein Array indiziert werden, wie sie in C / C sein kann ++ usw. können Sie sein in Scheiben geschnitten etwas wie Go .get seit 1.20, mit dem Vorbehalt mit, dass es fehlschlagen, wenn Sie die Mitte eines Codepunktes versuchen schneiden.

Rust hat auch OsStr / OsString für mit dem Host-Betriebssystem interagieren. Es ist Byte-Array auf Unix (jede Folge von Bytes enthält). Unter Windows ist es WTF-8 (Ein Super-Satz von UTF-8, die unförmig Unicode-Strings behandelt, die in Windows und Javascript erlaubt), &str und String frei zu OsStr oder OsString umgewandelt werden, sondern erfordern prüft die andere verdeckte Weg. Entweder indem sie nicht auf ungültige Unicode oder ersetzt mit dem Unicode-Ersatz char. (Es gibt auch Path / PathBuf, das sind nur Wrapper um OsStr / OsString).

Es gibt auch die CStr und CString Typen, die repräsentieren Null C-Strings beendet, wie OsStr auf Unix sie beliebiges Bytes enthalten können.

Rust nicht direkt unterstützt UTF-16. Aber kann OsStr zu UCS-2 auf Windows konvertieren.

Common Lisp (SBCL und CLISP)

Nach dieser , SBCL und CLISP Unicode unterstützen.

Objective-C

Kein eingebaut, abgesehen von was auch immer geschieht, als Teil der C-String-Bibliothek zur Verfügung steht.

Wenn Sie jedoch hinzufügen Frameworks ...

Foundation (Cocoa und Cocoa Touch) und Core Foundation

NSString und CFString implementieren jeweils eine vollständig Unicode-basierte String-Klasse (eigentlich mehr Klassen, als Implementierungsdetail). Die beiden sind „gebührenfreie verbrückten“, so dass das API für eine mit Instanzen der anderen verwendet werden, und umgekehrt.

Für Daten, die nicht notwendigerweise Text darstellen wird, gibt es NSData und cfdata. NSString stellt Verfahren und CFString stellt Funktionen Text-Daten zu codieren und zu Textdaten dekodieren. Core Foundation unterstützt mehr als hundert verschiedene Kodierungen, einschließlich aller Formen der UTFs. Die Codierungen sind in zwei Gruppen unterteilt: Einbau-Codierungen , die überall unterstützt werden, und externen Kodierungen , die zumindest unterstützt werden auf Mac OS X.

NSString stellt Verfahren zum Normieren auf Formen D, KD, C oder KC. Jeder gibt einen neuen String.

Sowohl NSString und CFString bieten eine Vielzahl von Vergleichs- / Sortierungsoptionen. Hier sind Stiftung Vergleich-Option Flaggen und Core Foundation der Vergleich-Option Flags. Sie sind nicht alle gleichbedeutend; zum Beispiel macht Core Foundation wörtlichen (strenge Code-Punkt-basiert) Vergleich den Standard, während Foundation nicht-wörtlichen Vergleich macht (so dass Zeichen mit Akzenten gleich vergleichen), um die Standardeinstellung.

Beachten Sie, dass Core Foundation nicht Objective-C erfordert; in der Tat, es war ziemlich viel erstellt die meisten Funktionen der Stiftung Carbon-Programmierer zur Verfügung zu stellen, die gerade in C oder C ++ verwendet. Aber ich vermute, die meisten modernen Gebrauch davon in Cocoa oder Cocoa Touch-Programmen ist, die alle in geschrieben werden, Objective-C oder Objective-C ++.

C / C ++

C

C vor C99 hat keine in Unicode-Unterstützung gebaut. Es verwendet Null beendet Zeichen-Arrays (char* oder char[]) als Strings. A char wird angegeben durch ein Byte (8 Bits).

C99 gibt wcs-Funktionen in den Zugängen zu den alten str-Funktionen (z strlen -> wcslen). Diese Funktionen nehmen wchar_t* statt char*. wchar_t steht für Wide-Zeichen-Typen. Die Größe des wchar_t ist Compiler-spezifisch und kann so klein wie 8 Bits sein. Während verschiedene Compiler in der Tat verschiedene Größen verwenden, ist es in der Regel 16-Bit (UTF-16) oder 32-Bit (UTF-32).

Die meisten C-Bibliotheksfunktionen sind transparent für UTF-8. Z.B. wenn Ihr Betriebssystem unterstützt UTF-8 (und UTF-8 als Ihre Systeme charset konfiguriert), dann das Erstellen einer Datei mit fopen Gabe eines UTF-8 kodierten String erstellen richtig benannte Datei.

C ++

Die Situation in C ++ ist sehr ähnlich (std::string -> std::wstring), aber es gibt zumindest Bemühungen, eine Art Unicode-Unterstützung in der Standardbibliothek .

D

D unterstützt UTF-8, UTF-16 und UTF-32 (char, wchar und Dchar, jeweils). Die Tabelle mit allen Typen können hier .

PHP

Es gibt bereits ein ganzen Thread dazu auf SO!

Rubin

Das einzige Material, das ich für Ruby finden kann ziemlich alt ist und nicht viel von einem rubist zu sein, ich bin mir nicht sicher, wie genau es ist.

  

Für die Aufzeichnung funktioniert Ruby-Unterstützung UTF-8, aber nicht multibyte. Intern wird in der Regel davon ausgegangen, Strings Byte-Vektoren sind, obwohl es Bibliotheken und Tricks sind, können Sie in der Regel Dinge Arbeit machen verwenden.

Gefunden dass hier .

Ruby 1.9

Ruby 1.9 legt Codierungen auf Strings. Binärketten verwenden, um die Codierung „ASCII-8BIT“. Während die Standard-Kodierung in der Regel UTF-8 auf jedem modernen System ist, kann man nicht davon ausgehen, dass alle Drittanbieter-Bibliothek Funktionen immer Strings in dieser Codierung zurückgibt. Es könnte jede andere Codierung zurückkehren (z.B. einige yaml Parser tun, dass in einigen Situationen). Wenn Sie zwei Zeichenfolgen unterschiedlicher Codierung verketten Sie Macht ein Encoding::CompatibilityError erhalten.

Arc

Arc hat keine Unicode-Unterstützung. Noch .

Lua

Lua 5.3 verfügt über eine integrierte in utf8 Bibliothek, die die UTF-8-Codierung behandelt. Es ermöglicht Ihnen, eine Reihe von Codepoints in die entsprechende Byte-Reihenfolge und umgekehrt zu konvertieren, erhalten die Länge (die Anzahl der Codepunkte in einem String), durchlaufen die Codepunkte in einem String, erhalten die Byte-Position des n th Codepunkt. Es bietet auch ein Muster, die durch die Mustererkennungsfunktionen im string Bibliothek verwendet werden, die eine UTF-8-Byte-Sequenz übereinstimmen.

Lua 5.3 hat Unicode-Codepunkt Escape-Sequenzen, die (zum Beispiel "\u{61}" für "a") in Stringliterale verwendet werden können. Sie übersetzen in UTF-8-Byte-Sequenzen.

Code Lua Quelle kann in UTF-8-Codierung codiert, oder jede, in dem ASCII-Zeichen ein Byte einnehmen. UTF-16 und UTF-32 werden nicht von dem Vanille-Lua-Interpreter verstanden. Aber Strings kann eine beliebige Codierung enthält oder beliebige binäre Daten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top