caracter especial es todo lo que no esté entre "0" y "9", "A" y "Z", y "a" y "z", cuando leas el caracter con un if descarta el caso... ejemplo
if(leido<'0' || (leido >'9' && leido < 'A') || (leido > 'Z' && leido < 'a') || leido > 'z') {
//esto es un caracter especial
}