Um dos mais interessantes recursos embutidos no conjunto ASCII de caracteres é a fácil conversão entre maiúsculas e minúsculas. Estas podem ser criadas somando ou subtraindo 0×0020 (sistema hexadecimal) ao seu ponto respectivo no código. Veja o exemplo e a figura abaixo para entender melhor o que estou tentando explicar aqui.
Ex.: A [0x0041] + 0×0020 = a [0x0061]

Podemos explorar o assunto “sistema hexadecimal” em um próximo post. Para quem quiser entender um pouco mais e não quiser esperar, veja o bom artigo da Wikipedia em http://pt.wikipedia.org/wiki/Hexadecimal.
Infelizmente, mesmo na codificação ASCII não era possível a utilização do “artifício” acima para converter caracteres acentuados maiúsculos em minúsculos e vice-versa. Além disso, o ASCII não foi suficiente para comportar as necessidades de internacionalização atuais. Hoje utilizamos uma codificação muito mais abrangente, chamada Unicode, que abordaremos em posts futuros.
Existem várias outras razões pelas quais um simples, ou mesmo complexo, algoritmo não cobre todas as necessidades de conversão. Seguem alguns exemplos:
• Alguns idiomas não possuem um mapeamento um-para-um entre seus caracteres maiúsculos e minúsculos;
• Enquanto caracteres do francês europeu perdem os acentos quando forem maiúsculas (é => E), no francês canadense, isso não acontece (é => É);
• O equivalente maiúsculo do alemão ‘ß’ é ‘SS’;
• A maior parte dos idiomas não-latinos não tem sequer o conceito de minúsculas e maiúsculas (chinês, japonês e tailandês, por exemplo).
Portanto, a capitalização torna-se uma operação bem sofisticada em diversos idiomas e nem de longe reflete a simplicidade dos velhos tempos do ASCII.
No próximo post… Endereços! Não se perca no caminho e até lá.
