Pergunta

Eu gostaria de ter um lugar canônico à informação piscina sobre o suporte a Unicode em vários idiomas. É uma parte da linguagem do núcleo? É fornecido em bibliotecas? É não disponível em tudo? Existe um recurso popular recurso para obter informações Unicode em uma linguagem? Um idioma por resposta, por favor. Além disso, se você poderia tornar a linguagem um título que tornaria mais fácil de encontrar.

Nenhuma solução correta

Outras dicas

Perl

Perl foi construído com suporte a Unicode, principalmente. Tipo de. De perldoc:

  • perlunitut - Tutorial sobre o uso de Unicode em Perl. Em grande parte ensina em termos absolutos sobre o que você deve e não deve fazer, tanto quanto Unicode. Abrange conceitos básicos.
  • perlunifaq -. Perguntas frequentes sobre Unicode em Perl
  • perluniintro - Introduction to Unicode em Perl. Menos "enfadonho" do que perlunitut .
  • perlunicode - Para quando você absolutamente tem que saber tudo o que há para saber sobre Unicode e Perl .

Python 3k

Python 3k (ou 3.0 ou 3000) tem nova abordagem para o tratamento de texto (unicode) e dados:
Vs. texto Dados em vez de Unicode Vs. 8-bit. Veja também Unicode HOWTO .

Java

Mesmo que com .NET, Java usa UTF-16 internamente: java.lang.String

A String representa uma string no formato UTF-16 em que caracteres suplementares são representados por pares substitutos (veja a seção Representações de caracteres Unicode na classe Character para mais informações). valores de índice referem-se a unidades de código char, portanto, um caractere suplementar usa duas posições em um String.

HQ9 +

O comando Q tem suporte a Unicode completo na maioria das implementações.

Delphi

Delphi 2009 suporta totalmente Unicode. Eles mudaram a implementação de string de padrão para Unicode codificação de 16 bits, ea maioria das bibliotecas, incluindo os terceiros partido apoiar Unicode. Veja de Marco Cantù Delphi e Unicode .

Antes de Delphi 2009, o suporte para Unicode foi limitado, mas não havia WideChar e WideString para armazenar a string codificada de 16 bits. Consulte Unicode em Delphi para mais informações.

Note, você ainda pode desenvolver a aplicação CJKV bilíngüe sem usar Unicode. Por exemplo, Mudança string codificada JIS para japonês podem ser armazenados usando AnsiString simples.

Python

Python 2 tem o str aulas e unicode. str objetos armazenar bytes, unicode objetos armazenar UTF-16 caracteres. A maioria das funções de biblioteca apoiar ambos (por exemplo os.listdir('.') retorna uma lista de str, os.listdir(u'.') retorna uma lista de objetos unicode). Ambos têm métodos encode e decode.

Python 3 basicamente renomeado unicode para str. O pitão 3 equivalente a str seria o tipo bytes. bytes tem um decode e str um método encode. Desde Python 3.3 str objetos usar internamente uma das várias codificações, a fim de salvar memória. Para um programador Python ainda parece uma seqüência unicode abstrato.

Python suporta:

  • codificação / decodificação
  • normalização
  • simples conversão caso e divisão em espaços em branco
  • olhando para cima personagens pelo seu nome

Python não apoiar / tem suporte limitado para:

  • agrupamento (limitado)
  • conversões caso especial em que não existe um: um mapeamento entre inferiores e superiores aos caracteres do
  • expressões regulares ( ele trabalhou em )
  • análise morfológica
  • manipulação de texto bidirecional

Veja também: A verdade sobre Unicode em Python

JavaScript

parece antes JS 1.3 não havia suporte para Unicode. A partir de 1,5, UTF-8, UTF-16 e UCS-2 são todos suportados. Você pode usar seqüências de escape Unicode em cordas, regexs e identificadores. Fonte

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

.NET armazena cordas internamente como uma seqüência de System.Char objetos. Um System.Char representa um UTF-16 unidade de código .

A partir da documentação do MSDN sobre System.Char:

O .NET Framework usa o Char estruturar para representar um Unicode personagem. O Padrão Unicode identifica cada caractere Unicode com um número escalar único 21-bit chamado de ponto de código, e define o UTF-16 que codifica forma que especifica como um ponto de código é codificado numa sequência de um ou mais valores de 16 bits. Cada valor de 16 bits varia de hexadecimal 0x0000 a 0xFFFF e é armazenado em Char estrutura.

recursos adicionais:

Tcl

cadeias

Tcl ter sido sequências de caracteres Unicode desde Tcl 8,1 (1999 ). Internamente, eles estão se transformou dinamicamente entre UTF-8 (estritamente o mesmo Modificado UTF-8 como Java devido ao manuseamento de caracteres U+00000) e UCS-2 (em endianness hospedeiro e BOM, é claro). Todas as cadeias externas (com uma excepção), incluindo os utilizados para comunicar com o sistema operacional, estão internamente Unicode antes de ser transformada em qualquer codificação que é necessário para o hospedeiro (ou é configurado manualmente sobre um canal de comunicação). A exceção é para onde os dados são copiados entre dois canais de comunicação com uma codificação comum (e algumas outras restrições não pertinente aqui), onde uma transferência binária livre de cópia direta é usado.

caracteres fora do BMP não são actualmente tratadas internamente ou externamente. Este é um problema conhecido.

Esquema R6RS

requer a implementação de Unicode 5.1. Todas as cordas estão em 'formato unicode'.

Rust

cordas da ferrugem (std::String e &str) são sempre válidos UTF-8, e não usar terminadores nulos, e como resultado não pode ser indexado como uma matriz, como eles podem ser em C / C ++, etc. Eles podem ser cortado um pouco como Go usando .get desde 1,20, com a ressalva de que ele irá falhar se você tentar cortar no meio de um ponto de código.

Rust também tem OsStr / OsString para interagir com o sistema operacional do host. É matriz de byte em Unix (contendo qualquer sequência de bytes). No windows-lo do WTF-8 (A super-conjunto de UTF-8 que manipula o cadeias de caracteres Unicode inadequadamente formados que são permitidos em Windows e Javascript), &str e String podem ser livremente convertidos para OsStr ou OsString, mas exigir verificações para converter o outro maneira. Ou por não em unicode inválido, ou substituir com o caractere de substituição Unicode. (Há também Path / PathBuf, que são apenas invólucros em torno OsStr / OsString).

Há também os tipos CStr e CString, que representam nulo terminada cadeias de C, como OsStr em Unix eles podem conter bytes arbitrárias.

Rust não suporta diretamente UTF-16. Mas pode converter OsStr a UCS-2 no Windows.

Common Lisp (SBCL e clisp)

De acordo com a este , SBCL e clisp suporte a Unicode.

Objective-C

Nenhum built-in, além de tudo o que acontece para estar disponível como parte da biblioteca corda C.

No entanto, uma vez que você adicionar estruturas ...

Foundation (Cacau e Cocoa Touch) e Core Foundation

NSString e CFString cada implementar uma classe string totalmente baseados em Unicode (na verdade várias classes, como um detalhe de implementação). Os dois são “isentas de portagem em ponte” de modo a que o API para um pode ser usado com instâncias do outro, e vice-versa.

Para dados que não necessariamente representam texto, há NSData e CFData. NSString fornece métodos e CFString proporciona funções para codificar o texto em dados e descodificação de dados de texto. Núcleo Fundação suporta mais de uma centena de codificações diferentes, incluindo todas as formas dos UTFs. As codificações são divididos em dois grupos: built-in codificações , que são suportados em todos os lugares, e codificações externos , que são, pelo menos, suportado no Mac OS X.

NSString fornece métodos para normalizar a formas D, KD, C, ou KC. Cada retorna uma nova string.

Ambos NSString e CFString fornecer uma ampla variedade de opções de comparação / agrupamento. Aqui estão bandeiras comparação de opção da Fundação e bandeiras comparação de opção do Núcleo Fundação . Eles não são todos sinônimos; por exemplo, o Core Fundação faz comparação literal (baseado no código de ponto estrito) o padrão, enquanto que Fundação torna a comparação não literal (permitindo que os caracteres acentuados ao comparar igual) o padrão.

Note que o Core Fundação não exige que Objective-C; de fato, ele foi criado praticamente para fornecer a maioria dos recursos de Fundação para os programadores de Carbono, que usaram C em linha reta ou C ++. No entanto, eu suspeito uso mais moderno do que é em programas cacau ou Cocoa Touch, que são todos escritos em Objective-C ou Objective-C ++.

C / C ++

C

C antes de C99 não tem suporte embutido unicode. Ele usa zero de matrizes de caracteres terminados (ou char* char[]) como cordas. Um char é especificado para por um byte (8 bits).

C99 especifica wcs-funções em adições às velhas str-funções (por exemplo strlen -> wcslen). Estas funções tomar wchar_t* vez de char*. wchar_t significa tipo de caractere de largura. O tamanho de wchar_t é específico do compilador e pode ser tão pequena como 8 bits. Embora diferentes compiladores de fato usar tamanhos diferentes, geralmente é de 16 bits (UTF-16) ou 32 bits (UTF-32).

A maioria das funções de biblioteca C são transparentes para UTF-8. Por exemplo. Se seu sistema operacional suporta UTF-8 (e UTF-8 está configurado como seu charset sistemas), em seguida, criar um arquivo usando fopen passando uma string codificada UTF-8 vai criar um arquivo devidamente nomeado.

C ++

A situação em C ++ é muito semelhante (std::string -> std::wstring), mas há pelo menos esforços para obter algum tipo de suporte a Unicode na biblioteca padrão .

D

D suporta UTF-8, UTF-16, e UTF-32 (carvão animal, wchar, e dchar, respectivamente). A tabela com todos os tipos podem ser encontrados aqui .

PHP

Já existe um inteiro segmento em isso em SO!

Rubi

A única coisa que eu posso encontrar para Ruby é muito velho e não ser muito de um rubist, não tenho certeza o quão preciso ele é.

Para o registro, Ruby faz utf8 apoio, mas não multibyte. Internamente, ele geralmente assume cordas são vetores de bytes, embora existam bibliotecas e truques geralmente você pode usar para fazer as coisas de trabalho.

Descobriu que aqui .

Ruby 1.9

Rubi 1,9 atribui codificações para strings. strings binárias usar a codificação "ASCII-8BIT". Enquanto a codificação padrão é geralmente UTF-8 em qualquer sistema moderno, você não pode assumir que todas as funções de biblioteca de terceiros sempre retorna cordas nesta codificação. Ele pode retornar qualquer outra codificação (por exemplo, alguns analisadores yaml fazer isso em algumas situações). Se você concatenar duas seqüências de codificação diferente você pode ter uma Encoding::CompatibilityError.

Arc

Arc não tem qualquer apoio unicode. entanto .

Lua

Lua 5.3 tem um built-in biblioteca utf8, que lida com a codificação UTF-8. Ele permite que você converter uma série de codepoints para a seqüência de byte correspondente e o contrário, obter o comprimento (o número de codepoints em uma string), iterar sobre os codepoints em uma corda, obter a posição byte do n th codepoint. Ele também fornece um padrão, para ser usado pelas funções de correspondência de padrões na biblioteca string, que irá coincidir com uma UTF-8 sequência de bytes.

5,3 Lua tem sequências de escape do ponto de código Unicode que podem ser utilizados nas cadeias de caracteres (por exemplo, para "\u{61}" "a"). Eles traduzem a 8 UTF-seqüências de bytes.

código fonte Lua pode ser codificado em UTF-8 ou de qualquer codificação, na qual os caracteres ASCII tomar-se um byte. UTF-16 e UTF-32 não são compreendidos pelo interpretador Lua baunilha. Mas strings podem conter qualquer codificação, ou dados binários arbitrários.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top