Codificação de caracteres
As regras para transformar caracteres em bytes e vice-versa — e o motivo de aparecer "Ã¥" onde deveria estar "å".
Uma codificação é um mapeamento entre os caracteres de um conjunto e sequências de bytes. O ASCII cobria 128 caracteres em sete bits. O ISO-8859-1 (Latin-1) completou até 256, suficiente para línguas da Europa Ocidental e pouco mais, o que gerou uma enxurrada de code pages incompatíveis entre si. O Unicode resolveu o conjunto de caracteres; o UTF-8 resolveu a codificação.
A percepção crucial é que o texto na memória nunca é "só texto" — é sempre bytes mais uma suposição sobre a codificação. Quando a suposição está errada, surge o mojibake. Por isso a codificação deve sempre ser declarada explicitamente: no cabeçalho HTTP, no <meta charset>, na conexão com o banco de dados.