Domanda

Vorrei avere un posto canonico per mettere in comune le informazioni sul supporto Unicode in varie lingue. Fa parte del linguaggio principale? Viene fornito nelle biblioteche? Non è affatto disponibile? Esiste una risorsa popolare per le informazioni Unicode in una lingua? Una lingua per risposta, per favore. Inoltre, se potessi rendere la lingua un'intestazione che faciliterebbe la ricerca.

Nessuna soluzione corretta

Altri suggerimenti

Perl

Perl ha il supporto Unicode integrato, principalmente. Una specie di. Da perldoc:

  • perlunitut - Tutorial sull'uso di Unicode in Perl. Insegna ampiamente in termini assoluti su cosa dovresti e non dovresti fare fino a Unicode. Nozioni di base sulle copertine.
  • perlunifaq - Domande frequenti su Unicode in Perl.
  • perluniintro - Introduzione a Unicode in Perl. Meno "predicato" di perlunitut .
  • perlunicode - Per quando devi assolutamente sapere tutto quello che c'è da sapere su Unicode e Perl .

Python 3k

Python 3k (o 3.0 o 3000) ha un nuovo approccio per la gestione di testo (unicode) e dati:
Testo vs. Dati anziché Unicode vs. 8-bit. Vedi anche Unicode HOWTO .

Java

Come per .NET, Java utilizza UTF-16 internamente: java.lang.String

  

Una String rappresenta una stringa nel formato UTF-16 in cui caratteri supplementari sono rappresentati da coppie surrogate (vedere la sezione Rappresentazioni di caratteri Unicode nel Carattere per ulteriori informazioni). I valori dell'indice si riferiscono alle unità di codice char , quindi un carattere supplementare utilizza due posizioni in una String .

HQ9 +

Il comando Q ha il supporto Unicode completo nella maggior parte delle implementazioni.

Delphi

Delphi 2009 supporta pienamente Unicode. Hanno modificato l'implementazione di string in modo predefinito con codifica Unicode a 16 bit e la maggior parte delle librerie, comprese quelle di terze parti, supporta Unicode. Vedi Delphi e Unicode di Marco Cantù.

Prima di Delphi 2009, il supporto per Unicode era limitato, ma c'erano WideChar e WideString per memorizzare la stringa codificata a 16 bit. Vedi Unicode in Delphi per maggiori informazioni.

Nota, puoi ancora sviluppare un'applicazione CJKV bilingue senza usare Unicode. Ad esempio, Shift JIS per la stringa codificata per il giapponese può essere archiviata usando AnsiString semplice .

Vai

Il linguaggio di programmazione Go di Google supporta Unicode e funziona con UTF-8.

Python

Python 2 ha le classi str e unicode . Gli oggetti str memorizzano i byte, gli oggetti unicode memorizzano i caratteri UTF-16. La maggior parte delle funzioni di libreria supportano entrambi (ad es. os.listdir ('.') restituisce un elenco di str , os.listdir (u '.') restituisce un elenco di oggetti unicode ). Entrambi hanno i metodi encode e decode .

Python 3 sostanzialmente ribattezzato unicode in str . Python 3 equivalente a str sarebbe il tipo byte . byte ha un decode e str un metodo encode . Poiché gli oggetti Python 3.3 str usano internamente uno di diverse codifiche per risparmiare memoria. Per un programmatore Python sembra ancora una sequenza unicode astratta.

Supporta Python:

  • codifica / decodifica
  • normalizzazione
  • semplice conversione e divisione in spazi bianchi
  • cercando i personaggi con il loro nome

Python non supporta / ha un supporto limitato per:

  • regole di confronto (limitate)
  • conversioni di casi speciali in cui non esiste un mapping 1: 1 tra caratteri minuscoli e maiuscoli
  • espressioni regolari ( ha funzionato su )
  • segmentazione del testo
  • gestione del testo bidirezionale

Vedi anche: La verità su Unicode in Python

JavaScript

Sembra che prima di JS 1.3 non esistesse il supporto per Unicode. A partire da 1.5, UTF-8, UTF-16 e UCS-2 sono tutti supportati. È possibile utilizzare le sequenze di escape Unicode in stringhe, regex e identificatori. Source

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

I negozi .NET stringhe internamente come una sequenza di System.Char . Un System.Char rappresenta un UTF-16 unità di codice .

Dalla documentazione MSDN su System.Char :

  

.NET Framework utilizza il carattere   struttura per rappresentare un Unicode   personaggio. Lo standard Unicode   identifica ogni carattere Unicode con   un numero scalare univoco a 21 bit chiamato a   punto di codice e definisce l'UTF-16   modulo di codifica che specifica come a   il punto di codice è codificato in una sequenza   di uno o più valori a 16 bit. Ogni   Il valore a 16 bit varia da esadecimale   Da 0x0000 a 0xFFFF ed è memorizzato in   una struttura Char .

Risorse aggiuntive:

Tcl

Le stringhe Tcl sono state sequenze di caratteri Unicode da Tcl 8.1 (1999 ). Internamente, si trasformano dinamicamente tra UTF-8 (rigorosamente lo stesso UTF-8 modificato come Java a causa della gestione di U + 00000 ) e UCS-2 (in endianness host e BOM, ovviamente). Tutte le stringhe esterne (con una sola eccezione), comprese quelle utilizzate per comunicare con il sistema operativo, sono internamente Unicode prima di essere trasformate in qualsiasi codifica richiesta per l'host (o configurata manualmente su un canale di comunicazione). L'eccezione riguarda i casi in cui i dati vengono copiati tra due canali di comunicazione con una codifica comune (e alcune altre restrizioni non germane qui) in cui viene utilizzato un trasferimento binario senza copia diretta.

I personaggi al di fuori del BMP non sono attualmente gestiti né internamente né esternamente. Questo è un problema noto.

Schema R6RS

Richiede l'implementazione di Unicode 5.1. Tutte le stringhe sono in "formato unicode".

Rust

Le stringhe di Rust ( std :: String e & amp; str ) sono sempre valide UTF-8 e non usano terminatori null e, di conseguenza, non possono essere indicizzati come un array, come se fossero in C / C ++, ecc. Possono essere suddivisi in qualche modo come Vai usando .get da 1.20, con l'avvertenza che fallirà se provi a tagliare la metà di un punto di codice.

Rust ha anche OsStr / OsString per interagire con il sistema operativo host. È un array di byte su Unix (contenente qualsiasi sequenza di byte). Su Windows è WTF-8 (un super-set di UTF-8 che gestisce le stringhe Unicode formate in modo errato che sono consentite in Windows e Javascript), & amp; str e String può essere liberamente convertito in OsStr o OsString , ma è necessario che i controlli vengano convertiti in altro modo. In caso di errore su Unicode non valido o sostituzione con il carattere di sostituzione Unicode. (C'è anche Path / PathBuf , che sono solo dei wrapper attorno a OsStr / OsString ).

Esistono anche i tipi CStr e CString , che rappresentano stringhe C con terminazione Null, come OsStr su Unix, che possono contenere byte arbitrari.

Rust non supporta direttamente UTF-16. Ma può convertire OsStr in UCS-2 su Windows.

Lisp comune (SBCL e CLisp)

Secondo this , SBCL e CLisp supportano Unicode.

Objective-C

Nessuno incorporato, a parte qualsiasi cosa sia disponibile come parte della libreria di stringhe C.

Tuttavia, una volta aggiunti i framework & # 8230;

Foundation (Cocoa and Cocoa Touch) e Core Foundation

NSString e CFString implementano ciascuno una classe di stringa completamente basata su Unicode (in realtà diverse classi, come dettaglio di implementazione). I due sono & # 8220; numero verde gratuito & # 8221; in modo che l'API per uno possa essere utilizzata con istanze dell'altro e viceversa.

Per i dati che non rappresentano necessariamente il testo, ci sono NSData e CFData. NSString fornisce metodi e CFString fornisce funzioni per codificare il testo in dati e decodificare il testo dai dati. Core Foundation supporta più di cento codifiche diverse, incluse tutte le forme di UTF. Le codifiche sono divise in due gruppi: codifiche integrate , supportate ovunque, e codifiche esterne , che sono almeno supportate su Mac OS X.

NSString fornisce metodi per normalizzare i moduli D, KD, C o KC. Ognuno restituisce una nuova stringa.

Sia NSString che CFString offrono un'ampia varietà di opzioni di confronto / confronto. Ecco Flag delle opzioni di confronto della Fondazione e flag delle opzioni di confronto della Core Foundation . Non sono tutti sinonimi; ad esempio, Core Foundation rende predefinito il confronto letterale (basato su code-point rigoroso), mentre Foundation rende il confronto non letterale (consentendo a personaggi con accenti di confrontare uguali) l'impostazione predefinita.

Nota che Core Foundation non richiede Objective-C; infatti, è stato creato praticamente per fornire la maggior parte delle funzionalità dei programmatori da Foundation a Carbon, che hanno usato direttamente C o C ++. Tuttavia, sospetto che il suo uso più moderno sia nei programmi Cocoa o Cocoa Touch, che sono tutti scritti in Objective-C o Objective-C ++.

C / C ++

C

C prima di C99 non ha un supporto Unicode integrato. Utilizza stringhe di caratteri con terminazione zero ( char * o char [] ). Un char è specificato da un byte (8 bit).

C99 specifica le funzioni wcs in aggiunta alle vecchie funzioni str (ad es. strlen - > wcslen ). Queste funzioni accettano wchar_t * anziché char * . wchar_t sta per tipo di carattere largo. La dimensione di wchar_t è specifica del compilatore e può essere piccola fino a 8 bit. Sebbene diversi compilatori utilizzino effettivamente dimensioni diverse, di solito è a 16 bit (UTF-16) o 32 bit (UTF-32).

La maggior parte delle funzioni della libreria C sono trasparenti a UTF-8. Per esempio. se il tuo sistema operativo supporta UTF-8 (e UTF-8 è configurato come set di caratteri del tuo sistema), quindi la creazione di un file utilizzando fopen passando una stringa codificata UTF-8 creerà un file con nome appropriato.

C ++

La situazione in C ++ è molto simile ( std :: string - > std :: wstring ), ma ci sono almeno degli sforzi per ottenere una sorta di < a href = "http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3572.html" rel = "nofollow noreferrer"> supporto unicode nella libreria standard .

D

D supporta UTF-8, UTF-16 e UTF-32 (rispettivamente char, wchar e dchar). La tabella con tutti i tipi è disponibile qui .

PHP

Esiste già un intero thread su questo su SO!

Rubino

L'unica cosa che posso trovare per Ruby è piuttosto vecchia e non essendo molto rubista, non sono sicuro di quanto sia accurata.

  

Per la cronaca, Ruby supporta utf8, ma non multibyte. Internamente, di solito si presume che le stringhe siano vettori di byte, sebbene ci siano librerie e trucchi che di solito è possibile utilizzare per far funzionare le cose.

Trovato che qui .

Ruby 1.9

Ruby 1.9 allega le codifiche alle stringhe. Le stringhe binarie usano la codifica "ASCII-8BIT". Mentre la codifica predefinita è di solito UTF-8 su qualsiasi sistema moderno, non si può presumere che tutte le funzioni di libreria di terze parti restituiscano sempre stringhe in questa codifica. Potrebbe restituire qualsiasi altra codifica (ad esempio alcuni parser yaml lo fanno in alcune situazioni). Se concateni due stringhe di codifica diversa, potresti ottenere un Encoding :: CompatibilityError .

Arc

Arc non ha alcun supporto Unicode. Tuttavia .

Lua

Lua 5.3 ha una libreria utf8 integrata, che gestisce la codifica UTF-8. Ti permette di convertire una serie di punti di codice nella sequenza di byte corrispondente e viceversa, ottenere la lunghezza (il numero di punti di codice in una stringa), scorrere i punti di codice in una stringa, ottenere la posizione in byte del n th codepoint. Fornisce inoltre un modello, che verrà utilizzato dalle funzioni di corrispondenza dei modelli nella libreria string , che corrisponderà a una sequenza di byte UTF-8.

Lua 5.3 ha sequenze di escape del punto di codice Unicode che possono essere utilizzate in valori letterali stringa (ad esempio, " \ u {61} " per " a " ). Si traducono in sequenze di byte UTF-8.

Il codice sorgente Lua può essere codificato in UTF-8 o qualsiasi codifica in cui i caratteri ASCII occupano un byte. UTF-16 e UTF-32 non sono compresi dall'interprete Lua vaniglia. Ma le stringhe possono contenere qualsiasi codifica o dati binari arbitrari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top