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_t
e char32_t
nas 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_t
a 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 usadoswchar_t
para armazenar texto Unicode. Owchar_t
tipo é 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_t
como 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
- The Unicode Standard, Versão 4.0 - edição online
- C Wide Character Functions @ Java2S
- Java Unicode Functions @ Java2S
- Multibyte (3) Man Page @ FreeBSD.org
- Caracteres multibyte e largos na Microsoft Developer Network
- Conjuntos de caracteres do Windows na Microsoft Developer Network
- Referência de programação de conjunto de caracteres e Unicode na Microsoft Developer Network
- Mantenha o suporte a caracteres multibyte simples @ EuroBSDCon, Beograd, 25 de setembro de 2016