Caracteres de controle Unicode - Unicode control characters

Muitos caracteres de controle Unicode são usados ​​para controlar a interpretação ou exibição de texto, mas esses caracteres em si não têm representação visual ou espacial. Por exemplo, o caractere nulo ( U + 0000 <control-0000> caracteres de controle ) é usado em ambientes de aplicativos de programação C para indicar o final de uma sequência de caracteres. Dessa forma, esses programas requerem apenas um único endereço de memória inicial para uma string (em oposição a um endereço inicial e um comprimento), uma vez que a string termina quando o programa lê o caractere nulo.

No sentido mais restrito, um código de controle é um caractere com a categoria geral Cc , que compreende os códigos de controle C0 e C1 , um conceito definido na ISO / IEC 2022 e herdado por Unicode, com o conjunto mais comum sendo definido na ISO / IEC 6429 . Os códigos de controle são tratados de forma distinta dos caracteres Unicode comuns, por exemplo, por não serem atribuídos nomes de caracteres (embora sejam atribuídos aliases formais normativos). Em um sentido mais amplo, outros caracteres de formato não imprimível, como aqueles usados ​​em texto bidirecional , também são chamados de caracteres de controle pelo software; estes são geralmente atribuídos à categoria geral Cf (formato), usada para efetores de formato introduzidos e definidos pelo próprio Unicode.

Códigos de controle da categoria "Cc" (C0 e C1)

O código de controle varia de 0x00–0x1F ("C0") e 0x7F originam-se da edição de 1967 do US-ASCII . O padrão ISO / IEC 2022 (ECMA-35) define métodos de extensão para ASCII, incluindo uma faixa secundária "C1" de códigos de controle de 8 bits de 0x80 a 0x9F, equivalente a sequências de 7 bits de ESC com os bytes 0x40 a 0x5F. Coletivamente, os códigos nessas faixas são conhecidos como códigos de controle C0 e C1 . Embora a ISO / IEC 2022 permita a existência de vários conjuntos de códigos de controle especificando diferentes interpretações desses códigos de controle, sua interpretação mais comum é especificada na ISO / IEC 6429 (ECMA-48).

A série de codificações ISO / IEC 8859 está em conformidade com a ISO / IEC 4873 (ECMA-43) nível 1, um subconjunto da ISO / IEC 2022 projetado para codificações de caracteres de 8 bits e, portanto, reserva a faixa 0x80–0x9F para uso como não impressão de códigos por conjuntos de códigos de controle C1, como ISO / IEC 6429. Unicode herda seu primeiro e segundo blocos (compreendendo U + 0000 a U + 00FF) de ASCII e ISO / IEC 8859-1 , incorporando assim os intervalos de códigos de controle C0 e C1 (U + 0000 – U + 001F, U + 007F – U + 009F) como categoria geral "Cc". Ele não atribui nomes normativos a esses códigos de controle, embora atribua a eles apelidos normativos.

Os códigos de controle da categoria "Cc" podem servir a uma variedade de finalidades, não se limitando a formatadores: por exemplo, o conjunto ASCII C0 padrão inclui seis formatadores ( BS , HT , LF , VT , FF e CR ), dez controles de transmissão, quatro controles do dispositivo, quatro separadores de informações e oito outros códigos de controle. A maioria desses caracteres não desempenha nenhuma função explícita no tratamento de texto Unicode e são usados ​​apenas por protocolos de nível superior, como aqueles usados ​​por emuladores de terminal . Certos caracteres são comumente usados ​​para fins de formatação ou sentinela :

  • U + 0000 <control-0000> (NUL: NULL) (usado em strings terminadas em nulo )
  • U + 0009 <control-0009> (HT: TABULAÇÃO HORIZONTAL) (inserido pela tecla tab )
  • U + 000A <control-000A> (LF: LINE FEED) (usado como uma quebra de linha )
  • U + 000C <control-000C> (FF: FORM FEED) (denota uma quebra de página em um arquivo de texto simples)
  • U + 000D <control-000D> (CR: CARRIAGE RETURN) (usado em algumas convenções de quebra de linha)
  • U + 0085 <control-0085> (NEL: NEXT LINE) (às vezes usado como uma quebra de linha no texto transcodificado de EBCDIC )

O Unicode especifica apenas a semântica para U + 0009 — U + 000D, U + 001C — U + 001F e U + 0085 (os efetores de formato ASCII, exceto para BS , mais os separadores de informações ASCII e C1 NEL ). O restante dos códigos de controle "Cc" são transparentes para Unicode e seus significados são deixados para protocolos de nível superior, embora a interpretação conforme definido na ISO / IEC 6429 seja sugerida como padrão. Além disso, certos protocolos especializados de nível superior, como teletexto transcodificado , podem incluir uma interpretação diferente de toda a faixa de código de controle C0.

Separadores Unicode introduzidos

Em uma tentativa de simplificar os vários caracteres de nova linha usados ​​no texto legado, o Unicode introduz seus próprios caracteres de nova linha para separar linhas ou parágrafos: U + 2028 LINE SEPARATOR (HTML  &#8232; ) (abreviado LS ou LSEP ) e U + 2029 PARAGRAPH SEPARATOR (HTML  &#8233; ) (abreviado como PS ou PSEP ).

Como CR e LF, LS e PS são efetores para formatação de texto; ao contrário de CR e LF, eles não são tratados como "códigos de controle" para fins ECMA-35 / ECMA-48 (categoria Cc ), em vez de terem semântica definida inteiramente pelo próprio Unicode. Eles são atribuídos a categorias Unicode sui generis e , respectivamente, na categoria principal (separador) usada para determinados caracteres de espaço em branco . ZlZpZ

Tags de linguagem

O Unicode anteriormente incluía 128 caracteres, agora obsoleto, para tags de idioma. Esses caracteres espelhavam essencialmente os 128 caracteres ASCII, mas eram usados ​​para identificar o texto subsequente como pertencente a um idioma específico de acordo com o BCP 47 . Por exemplo, para indicar o texto subsequente como a variante do inglês, conforme escrito nos Estados Unidos, o 'caractere da etiqueta de idioma' inicial (U + E0001) seguido pela sequência 'Etiqueta pequena, letra e' (U + E0065), 'Etiqueta pequena A letra n '(U + E006E),' Tag Hífen-menos '(U + E002D),' Tag minúsculo u '(U + E0075) e' Tag minúsculo letra s '(U + E0073) teria sido usado.

Esses caracteres da tag de idioma não seriam exibidos por si próprios. No entanto, eles forneceriam informações para processamento de texto ou mesmo para a exibição de outros caracteres. Por exemplo, a exibição de ideogramas Unihan pode ter substituído glifos diferentes se as marcas de idioma indicassem coreano do que se as marcas indicassem japonês. Outro exemplo pode ter influenciado a exibição dos dígitos decimais de 0 a 9 de maneira diferente, dependendo do idioma em que apareceram.

Os caracteres da tag U + E0001, U + E0020 – U + E007E e U + E007F foram descontinuados no Unicode 5.1 (2008) e não devem ser usados ​​para informações de idioma.

Com o lançamento do Unicode 8.0 (2015), U + E0020 – U + E007E não são mais caracteres obsoletos. (U + E0001 LANGUAGE TAG e U + E007F CANCEL TAG permanecem obsoletos.) A alteração foi feita "para abrir caminho para o uso futuro potencial de caracteres de tag para uma finalidade diferente de representar tags de idioma". O Unicode afirma que "o uso de caracteres de tag para representar tags de idioma em um fluxo de texto simples ainda é um mecanismo obsoleto para transmitir informações de idioma sobre texto.

Anotação interlinear

Três caracteres de formatação fornecem suporte para anotação interlinear (U + FFF9 ANCHOR, U + FFFA SEPARATOR, U + FFFB TERMINATOR). Isso pode ser usado para fornecer notas que normalmente seriam exibidas entre as linhas de outro texto. O Unicode considera essa anotação como rich text e recomenda o uso de outros protocolos para essa anotação. A recomendação de marcação W3C Ruby é um exemplo de protocolo alternativo que suporta anotações interlineares mais avançadas.

Controle de texto bidirecional

O Unicode oferece suporte a texto bidirecional padrão sem nenhum caractere especial. Em outras palavras, o software em conformidade com Unicode deve exibir caracteres da direita para a esquerda, como letras hebraicas, da direita para a esquerda simplesmente a partir das propriedades desses caracteres. Da mesma forma, o Unicode lida com a mistura de texto da esquerda para a direita com texto da direita para a esquerda sem nenhum caractere especial. Por exemplo, pode-se citar o árabe (“بسم الله”) (traduzido para o inglês como "Bismillah") ao lado do inglês e as letras árabes fluirão da direita para a esquerda e as letras latinas da esquerda para a direita.

No entanto, a direcionalidade pode não ser detectada corretamente se o texto da esquerda para a direita for citado no início de um parágrafo da direita para a esquerda (ou vice-versa ), e o suporte para texto bidirecional se torna ainda mais complicado quando o texto flui em direções opostas é incorporado hierarquicamente, por exemplo, se um texto em inglês cita uma frase em árabe que, por sua vez, cita uma frase em inglês. Outras situações também podem complicar isso, como quando um autor deseja que os caracteres da esquerda para a direita sejam substituídos para que fluam da direita para a esquerda. Embora essas situações sejam bastante raras, o Unicode fornece doze caracteres (U + 061C, U + 200E, U + 200F, U + 202A, U + 202B, U + 202C, U + 202D, U + 202E, U + 2066, U + 2067, U + 2068, U + 2069) para ajudar a controlar esses níveis de texto bidirecional incorporado de até 125 níveis de profundidade.

Seletores de variação

Muitos caracteres são mapeados para glifos alternativos, dependendo do contexto. Por exemplo, os caracteres cursivos árabes e latinos substituem diferentes glifos para conectar os glifos, dependendo se o caractere é o caractere inicial de uma palavra, o caractere final, um caractere medial ou um caractere isolado. Esses tipos de substituição de glifo são facilmente manipulados pelo contexto do caractere, sem nenhuma outra entrada de autoria envolvida. Os autores também podem usar caracteres de propósito especial, como associadores e não associadores, para forçar uma forma alternativa de glifo onde não apareceria de outra forma. Ligaduras são instâncias semelhantes em que os glifos podem ser substituídos simplesmente ativando ou desativando as ligaduras como um atributo de rich text.

No entanto, para outra substituição de glifo, a intenção do autor pode precisar ser codificada com o texto e não pode ser determinada contextualmente. Esse é o caso de caracteres / glifos chamados de gaiji, onde diferentes glifos são usados ​​para o mesmo caractere historicamente ou para ideogramas para nomes de família. Esta é uma das áreas cinzentas na distinção entre um glifo e um caractere. Se um nome de família difere ligeiramente do caractere ideográfico do qual deriva, então é uma variante de glifo simples ou uma variante de caractere. A partir do Unicode 3.2 e 4.0, o conjunto de caracteres agora inclui 256 seletores de variação para que esses caracteres de marca combinados possam selecionar entre 256 possíveis variações de caracteres / glifos para o caractere anterior.

Imagens de controle

O Unicode fornece caracteres gráficos para representar códigos de controle C0 (e espaço e uma nova linha genérica ) no bloco Imagens de Controle . Eles são representações visuais, não os próprios códigos de controle reais. Não há caracteres equivalentes para os códigos de controle C1 .


Gráfico de código oficial do Consórcio Unicode da Control Pictures (PDF)
  0 1 2 3 4 5 6 7 8 9 UMA B C D E F
U + 240x
U + 241x
U + 242x
U + 243x
Notas
1. ^ A partir do Unicode versão 13.0
2. ^ As áreas cinzentas indicam pontos de código não atribuídos

Veja também

Referências

  1. ^ a b "Nome alternativo" . Banco de dados de caracteres Unicode . Consórcio Unicode .
  2. ^ a b Segan, Danilo. "Rumo a uma área de trabalho localizada" . Para alguns casos em que a tomada de decisão automática não funciona, você pode adicionar manualmente marcadores de direção específicos clicando com o botão direito do mouse no campo de texto, escolhendo "Inserir caractere de controle Unicode" no menu e selecionando a marca de direção apropriada. Isso permitiria a você, por exemplo, iniciar seu texto RTL com uma palavra LTR (como "GNOME").
  3. ^ ISO / IEC JTC 1 / SC 2 / WG 3 (12/02/1998). Texto final do DIS 8859-1, conjuntos de caracteres gráficos codificados de byte único de 8 bits - Parte 1: Alfabeto latino No.1 (PDF) . ISO / IEC FDIS 8859-1: 1998; JTC1 / SC2 / N2988; WG3 / N411. Este conjunto de caracteres gráficos codificados pode ser considerado como uma versão de um código de 8 bits de acordo com a ISO / IEC 2022 ou ISO / IEC 4873 no nível 1. [...] As posições sombreadas na tabela de códigos correspondem a combinações de bits que não representam personagens gráficos. Seu uso está fora do escopo da ISO / IEC 8859; é especificado em outras Normas Internacionais, por exemplo ISO / IEC 6429.
  4. ^ ISO / TC 97 / SC 2 (1975). O conjunto de caracteres de controle do ISO 646 (PDF) . ITSCJ / IPSJ . ISO-IR-1.
  5. ^ Unicode Consortium (2019). 23.1: Códigos de controle (PDF) . O padrão Unicode (12.0.0 ed.). pp. 868–870. ISBN   978-1-936213-22-1 .
  6. ^ Ewell, Doug (2020-10-16). "Gráficos em mosaico separados por teletexto" . Arquivo de listas de mala direta Unicode . Consórcio Unicode . Eu reitero que foi UTC [ Comitê Técnico Unicode ] e Script Ad Hoc que forneceram a orientação para o grupo escrever a proposta de Símbolos para Computação Legada (e há um segundo a caminho) que 0x00 a 0x1F no conjunto de teletexto original deve mapear para U + 0000 a U + 001F ao converter para Unicode.
  7. ^ "RFC6082: Reprovação de caracteres de tag de linguagem Unicode: RFC 2482 é histórico" . Força-Tarefa de Engenharia da Internet (IETF). Novembro de 2010.
  8. ^ a b "Unicode 8.0.0, Implicações para a migração" . Consórcio Unicode.
  9. ^ "UAX # 9: Algoritmo Bidirecional Unicode" . Consórcio Unicode. 09/05/2018.