Caráter amplo - Wide character

Um caractere largo é um tipo de dados de caractere de computador que geralmente tem um tamanho maior do que o caractere tradicional de 8 bits . O tamanho aumentado do tipo de dados permite o uso de conjuntos maiores de caracteres codificados .

História

Durante a década de 1960, os fabricantes de mainframe e minicomputador começaram a padronizar em torno do byte de 8 bits como seu menor tipo de dados. O conjunto de caracteres ASCII de 7 bits se tornou o método padrão da indústria para codificação de caracteres alfanuméricos para máquinas de teletipo e terminais de computador . O bit extra foi usado para paridade, para garantir a integridade do armazenamento e transmissão de dados. Como resultado, o byte de 8 bits se tornou o tipo de dados de fato para sistemas de computador que armazenam caracteres ASCII na memória.

Posteriormente, os fabricantes de computador começaram a usar o bit sobressalente para estender o conjunto de caracteres ASCII além de seu conjunto limitado de caracteres do alfabeto inglês . Extensões de 8 bits , como a página de código 37 da IBM, PETSCII e ISO 8859, tornaram-se comuns, oferecendo suporte de terminal para grego , cirílico e muitos outros. No entanto, essas extensões ainda eram limitadas, pois eram específicas da região e muitas vezes não podiam ser usadas em conjunto. Rotinas de conversão especiais tiveram que ser usadas para converter de um conjunto de caracteres para outro, frequentemente resultando em tradução destrutiva quando nenhum caractere equivalente existia no conjunto de destino.

Em 1989, a International Organization for Standardization começou a trabalhar no Universal Character Set (UCS), um conjunto de caracteres multilíngue que poderia ser codificado usando um valor de 16 bits (2 bytes) ou 32 bits (4 bytes). Esses valores maiores exigiam o uso de um tipo de dados maior que 8 bits para armazenar os novos valores de caracteres na memória. Assim, o termo caractere amplo foi usado para diferenciá-los dos tipos de dados de caracteres tradicionais de 8 bits.

Relação com UCS e Unicode

Um caractere largo se refere ao tamanho do tipo de dados na memória. Ele não indica como cada valor em um conjunto de caracteres é definido. Em vez disso, esses valores são definidos usando conjuntos de caracteres, com UCS e Unicode sendo simplesmente dois conjuntos de caracteres comuns que codificam mais caracteres do que um valor numérico de 8 bits (total de 255) permitiria.

Relação com caracteres multibyte

Assim como os sistemas de transmissão de dados anteriores sofriam com a falta de um caminho de dados limpo de 8 bits , os sistemas de transmissão modernos muitas vezes carecem de suporte para caminhos de dados de 16 ou 32 bits para dados de caracteres. Isso levou a sistemas de codificação de caracteres, como UTF-8, que podem usar vários bytes para codificar um valor muito grande para um único símbolo de 8 bits.

O padrão C distingue entre codificações multibyte de caracteres, que usam um número fixo ou variável de bytes para representar cada caractere (usado principalmente no código-fonte e arquivos externos), de caracteres largos , que são representações em tempo de execução de caracteres em objetos únicos ( normalmente, maior que 8 bits).

Tamanho de um personagem amplo

UTF-16 little-endian é o padrão de codificação na Microsoft (e no sistema operacional Windows). No entanto, com pares substitutos, ele também oferece suporte a 32 bits. A plataforma .NET Framework oferece suporte a várias implementações de caracteres amplos, incluindo UTF7, UTF8, UTF16 e UTF32.

A plataforma Java requer que variáveis ​​de caracteres amplas sejam definidas como valores de 16 bits e que os caracteres sejam codificados usando UTF-16 (devido ao uso anterior de UCS-2), enquanto os sistemas modernos do tipo Unix geralmente requerem UTF-8 em suas interfaces .

Especificidades de programação

C / C ++

As bibliotecas padrão C e C ++ incluem vários recursos para lidar com caracteres largos e strings compostas por eles. Os caracteres largos são definidos usando o tipo de dados wchar_t, que no padrão C90 original foi definido como

"um tipo integral cujo intervalo de valores pode representar códigos distintos para todos os membros do maior conjunto de caracteres estendidos especificado entre as localidades com suporte" (ISO 9899: 1990 §4.1.5)

Tanto C quanto C ++ introduziram tipos de caracteres de tamanho fixo char16_te char32_tnas revisões de 2011 de seus respectivos padrões para fornecer representação inequívoca de formatos de transformação Unicode de 16 e 32 bits , deixando wchar_ta definição de implementação. O padrão ISO / IEC 10646: 2003 Unicode 4.0 diz que:

"A largura de wchar_té específica do compilador e pode ser tão pequena quanto 8 bits. Consequentemente, os programas que precisam ser portáveis ​​em qualquer compilador C ou C ++ não devem ser usados wchar_tpara armazenar texto Unicode. O wchar_ttipo é destinado ao armazenamento de caracteres largos definidos pelo compilador , que podem ser caracteres Unicode em alguns compiladores. "

Pitão

De acordo com a documentação do Python , a linguagem às vezes usa wchar_tcomo base para seu tipo de caractere Py_UNICODE. Depende se wchar_té "compatível com a variante de compilação Python Unicode escolhida" nesse sistema.

Referências

links externos