it-swarm.dev

O que é o caractere Unicode U + 001A? Aka 0x1A

O caractere U + 001A aparece frequentemente em mensagens de erro relacionadas à codificação de caracteres. Qual é o caractere U + 001A?

25
KevSheedy

U + 001A é definido no Padrão Unicode como um caractere de controle com o nome SUBSTITUTE, e pertence a um grupo caracterizado da seguinte forma, em capítulo 16 do padrão: “Existem 65 pontos de código reservados no padrão Unicode para compatibilidade com os códigos de controle C0 e C1 definidos na estrutura ISO/IEC 2022 [...] O padrão Unicode fornece o intercâmbio intacto desses pontos de código, nem adicionando nem subtraindo sua semântica. A semântica dos códigos de controle é geralmente determinada pelo aplicativo com o qual eles são usados. No entanto, na ausência de usos específicos de aplicativos, eles podem ser interpretados de acordo com a semântica da função de controle especificada na ISO/IEC 6429: 1992. ”

A ISO 6429 é efetivamente equivalente a ECMA 48 , que menciona esse código como tendo também o nome abreviado SUB e o define da seguinte forma: “SUB é usado no lugar de um caractere que foi encontrado para inválido ou com erro. O SUB deve ser introduzido por meios automáticos. ”Isso reflete a definição deste código de controle em Ascii .

Assim, em geral, U + 001A pode ser usado para indicar um erro de dados no nível de caractere, como a presença de bytes, em supostos dados de caracteres, que não têm interpretação na codificação de caracteres aplicada. Falando de maneira geral, isso significaria "dados incorretos de caracteres", mas mais apropriadamente "dados malformados, ao tentar interpretar dados como caracteres". No entanto, no Unicode, o U + FFFD REPLACEMENT CHARACTER é mais apropriado, pois possui semântica Unicode específica.

Como a pergunta foi marcada com “xml”, é preciso observar que no XML 1.0, U + 001A é proibido, pela cláusula 2.2 caracteres . Observe que o comentário “qualquer caractere Unicode, excluindo os blocos substitutos, FFFE e FFFF” é enganoso (mas os comentários não são normativos); U + 001A é um caractere Unicode, embora não seja um caractere gráfico e seu efeito não esteja definido no padrão Unicode.

21
Jukka K. Korpela

Esse é o código de controle Ctrl + Z. É meio especial no Windows, que herdou do DOS e do CP/M. Seu uso legado era como um marcador de final de texto, semelhante ao modo como Ctrl + D é usado no Unix.

Vê-lo em uma mensagem de erro ou usado como o caractere de fallback para uma falha na conversão de codificação é, no entanto, bastante incomum. Eu verificaria o código duas vezes e garantiria que não fosse U + 003F ou U + FFFD, os caracteres de fallback de codificação mais comuns. Ou apenas uma peculiaridade do código específico com o qual você está lidando.

14
Hans Passant

Até onde eu sei, + 001A é um caractere herdado no Unicode. Sua única razão de existência é que ele já foi definido em ASCII como o caractere substituto ("... usado no local de um caractere reconhecido como inválido ou com erro ou que não pode ser representado em um determinado dispositivo. "). Às vezes, também era usado para finalizar um fluxo de caracteres (que provavelmente é uma fonte comum de problemas)

No Unicode, essa função é assumida pelo + FFFD REPLACEMENT CHARACTER .

7
Joachim Sauer