The reason it works locally is because charset detection works different when loading from a local file than when loading from a webserver.
In particular browsers tend to be a lot more enthusiastic about treating local files as unicode than they are for responses from web servers.
The reason the meta charset doesn't pick up is you're missing quotes around `utf-8` (also it may be past the 1024 byte mark, hard to say without running wc).