Because there are many badly written web browsers out there, and although there are specifications that explain how they're generally supposed to behave, a significant number of them don't behave correctly, or have abnormal behavior on edge cases.
Basically, some browsers look in the HTTP header, others look in the HTML, and no one has the time to test every permutation of their generated pages with even a fraction of the browsers out there. (warning -- the evolt link is down right now, or blocked from my work ... I'm just putting it in with the chance that it comes back up)
As for why there are so many encodings -- it's because of the old days of 8 bit computing, when you only had 256 different characters that could be stored, and so you couldn't have a character set with both all latin and all cyrillic characters. (and eastern languages? not a chance). Although there are multiple UTF standards, it's typically best to move towards one of them. If you're using primarily latin languages, UTF8 will typically take up less space.
|