cat
tem uma -v
opção que converte caracteres não imprimíveis em sua notação de acento circunflexo (o que é útil se não queremos que o terminal interprete os caracteres de controle literalmente na cat
saída).
Mas pelo que entendi, a notação de acento circunflexo se aplica apenas a caracteres não imprimíveis no alfabeto ASCII. E os caracteres não imprimíveis em UTF que não se enquadram em ASCII (por exemplo, https://www.compart.com/en/unicode/category/Cc )? Que notação será cat -v
usada para exibi-los?
Podemos gerar um arquivo contendo os primeiros 256 caracteres Unicode em UTF-8 com:
Isso inclui os controles não ASCII (C1) no Suplemento Latin-1 e também muitos caracteres de impressão.
Agora podemos
cat -v
:(Eu envolvi isso manualmente para que seja legível)
Você pode ver que ele representa U+0080 no início da quarta linha, que é UTF-8
C2 80
, comoM-BM-^@
.M-B
representa o byte C2: B é 0x42, entãoM-
representa a configuração do bit alto (ou seja, adicionando 0x80).M-^@
está fazendo o mesmo para um byte nulo (meta-ctrl-@) - a notaçãoM-x
and^x
é combinada.A mesma coisa acontecerá para todos os codepoints não ASCII, que consistirão inteiramente em bytes altos em UTF-8, ou todos os bytes 128-255 em qualquer outra codificação. Diferentes
cat
implementações podem ter seu próprio comportamento, pois-v
não é uma opção padrãocat
, mas tanto o GNU cat quanto as versões comuns do BSD se comportam dessa maneira.