Então, por que o que você chama de texto exibe como funciona?
Todo o texto é armazenado novamente, como uma combinação de 0 ou 1. Mas isso em si é bastante inútil para um usuário final que deseja ver o valor armazenado na unidade. É aqui que entra a codificação de caracteres .
Você pode ter ouvido falar de alguns tipos diferentes de codificação de caracteres antes, como ASCII e UTF. Eles são usados para mapear o binário armazenado para um caractere que você reconheça (que será então exibido usando uma determinada fonte, mas isso é um pouco fora desse escopo).
Usando ASCII como exemplo, os caracteres são armazenados em 7 bits (onde um byte consiste em 8 bits), de 0000000 a 1111111. Você pode ver como cada caractere é mapeado aqui:
Cada caractere, isto é, maiúscula, minúscula, símbolo e "caracteres especiais", são interpretados por um determinado valor. Usando Hello
como exemplo:
'H' -> Decimal 72 -> Binary 01001000
'e' -> Decimal 101 -> Binary 01100101
'l' -> Decimal 108 -> Binary 01101100
'l' -> Decimal 108 -> Binary 01101100
'o' -> Decimal 111 -> Binary 01101111
Outros mapas de caracteres usarão todos os 8 bits, ou até mais de 1 byte, para armazenar um caractere, permitindo alfabetos maiores ou múltiplos alfabetos e mais símbolos armazenados no mesmo arquivo, usando a mesma codificação.
Assim, podemos ver como o binário pode agora ser convertido no que consideramos "texto".
Mas o que acontece quando você abre outro tipo de arquivo, não é considerado texto?
Todo arquivo em sua máquina, sendo armazenado como binário, pode ser aberto por um editor de texto que tentará ler o arquivo como uma forma de codificação. Naturalmente, o que é exibido será algo sem sentido, já que o arquivo não foi codificado para ser lido por um mapa de caracteres , mas sim para ser executado de uma maneira diferente. Muitos dos bytes corresponderão coincidentemente a um caractere do mapa que ele está usando, o que ocasionalmente significa que você vê o caractere estranho que você reconhece. O resto não será mapeado e retornará um caractere estranho ou ausente, ou corresponderá diferentes partes do mapa que não fazem sentido decodificar. Não há nada que pare tentando embora.
Eu editei os dados para um arquivo PNG, mas ele ainda foi aberto e não foi corrompido. Por quê?
Procurando aqui você pode ver a estrutura de um arquivo PNG. Especificamente:
Chunks can appear in any order, subject to the restrictions placed on each chunk type. (One notable restriction is that IHDR must appear first and IEND must appear last; thus the IEND chunk serves as an end-of-file marker.) Multiple chunks of the same type can appear, but only if specifically permitted for that type.
Esse tipo de arquivo específico fornece um marcador de fim de arquivo, que informará ao leitor que os dados além desse ponto não fazem parte do arquivo. Como tal, você pode adicionar dados além disso e pode não causar um problema se o leitor estiver manipulando o arquivo corretamente. Dito isto, se você adicionar outro marcador EoF, isso pode causar confusão.
Outra coisa a notar é que o tipo de arquivo é feito de blocos, cada um com uma verificação de CRC. A checagem do CRC diz ao leitor se o chunk é válido e não foi alterado, e deve sempre estar presente. O leitor pode ser treinado para desconsiderar dados que não incluam um bloco de dados válido e combinação de CRC, embora eu suspeite que isso cause um erro de alguma forma.
Leitura adicional: