Caracteres invisíveis em UTF-8

image_pdfimage_print

Muitas vezes somos enganados por códigos copiados e colados, que aparentam estar corretos, mas por vezes não funcionam como esperamos.

Isto ocorre na maioria das vezes pela existência de caracteres invisíveis que são interpretados pelo que eles realmente são, porém, nós, ao executarmos mentalmente, iremos interpretá-los pelo que eles aparentam.

Exemplos de caracteres invisíveis no UTF-8:

Código UTF8 ; Nome ; Código HTML
U+2006 ; Six-Per-Em Space ;  

U+2008 ; Punctuation Space ;  

U+2009 ; Thin Space ;   

U+200A ; Hair Space ;   

U+200B ; Zero-Width Space ; ​

U+200C ; Zero Width Non-Joiner ; ‌

U+200D ; Zero Width Joiner ; ‍

U+200E ; Left-To-Right Mark ; ‎

U+200F ; Right-To-Left Mark ; ‏

U+202F ; Narrow No-Break Space ;  

Então, existindo algum destes caracteres, por exemplo, no exemplo abaixo, sua execução poderá ter resultado bem distinto do que esperamos.

mkdir -p /tmp/novo_diretorio; cd /tmp/novo_diretorio; touch teste.txt; ls .​/*

Seria esperado o resultado teste.txt como saída no terminal, mas o resultado será:
ls: cannot access .​/*: No such file or directory
Isto ocorre porque há um caracter invisível foi utilizado no ls.

Então fique atento. Em muitos códigos tanto shell, como de diversas outras linguagens, variações deste problemas podem lhe causar bastante tempo perdido. Esteja atento para evitar este tipo de contra-tempos.

Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!