Ich verstehe worauf du hinaus willst, aber ich verstehe nicht, wie der User es schafft eine falsche Kodierung richtig anzeigen zu lassen. Wenn er die falsche Kodierung nutzt, dann werden auch in JS die falschen Zeichen angezeigt.
Das ist genau das Problem. In Javascript werden die Zeichen falsch angezeigt, da der Browser oder seine JS-Engine oder was auch immer die Datei so interpretiert, wie es im Header angegeben ist (z.B. "utf-8"). Der Benutzer kann die Datei aber (bspw. in Windows Notepad) unabhängig von den HTML-Angaben als ANSI speichern. Das ist natürlich falsch, aber für ihn nicht transparent, sofern er sich nicht vorher schon ausreichend mit Zeichenkodierungen befasst hat. Die meisten User denken leider, der HTML-Meta-Tag würde ausreichen.
Was meinst du mit interpretiert? Inwiefern muss JS den String interpretieren? Und welche Probleme trene dabei konkret auf?
Na, zunächst ist der String in der Datei ja nur eine Bytefolge. Da die Datei angeblich (wie gesagt, Angabe im HTML-Meta-Tag) UTF-8-kodiert sein soll, versucht er diese auch als UTF-8 zu interpretieren. Jetzt kommt ein ä (z.B. Latin-1-kodiert) als ein Byte mit dem Wert 228 daher. In UTF-8 müssen jetzt zwei weitere Bytes (Wert > 128) folgen, weil ab 224 in UTF-8 die 3-Byte-Unicode-Zeichen kommen. Da aber dahinter etwas anderes, womöglich ein x (ANSI- und UTF-8-Wert 120) folgt, ist dieses Zeichen ungültig und wird leider sofort durch den Unicode-Codepoint \uFFFD (Replacement Character) ausgetauscht, wodurch die Information um welches Byte es sich handelte, verloren gehen.