我想用javascript从我的服务器读取文件,并在html页面中显示它的内容。 该文件是ANSI字符集,它有罗马尼亚字符..我想以它们的方式显示这些字符:D不是在不同的黑色符号..
所以我认为我的问题是charset ..我有一个get请求,它接受文件的内容,如下所示:
function IO(U, V) {//LA MOD String Version. A tiny ajax library. by, DanDavis
var X = !window.XMLHttpRequest ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
X.open(V ? 'PUT' : 'GET', U, false );
X.setRequestHeader('Content-Type', 'Charset=UTF-8');
X.send(V ? V : '');return X.responseText;}
据我所知,罗马尼亚字符包含在UTF-8字符集中,因此我将请求标头的字符集设置为utf-8 ..文件采用utf-8格式,我有元标记告诉浏览器页面有utf-8内容..
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
因此,如果我向服务器查询直接文件,浏览器会显示罗马尼亚字符,但如果我通过此脚本显示页面内容,我只会看到符号而不是字符。 那么我做错了什么?
谢谢!
PS:我希望这适用于Firefox,至少不一定适用于所有浏览器..
答案 0 :(得分:5)
虽然我最初的假设与T.J相同。 Crowder's,quick chat确定OP使用某些托管服务,并且无法轻松更改Content-Type标头。
文件以text/plain
或text/html
发送,没有任何Charset
参数,因此浏览器会将其解释为UTF-8(默认设置)。
所以保存 UTF-8(而不是ANSI / Windows-1252)中的文件就可以了。
答案 1 :(得分:3)
您需要确保返回文件数据的HTTP响应在其上标识了正确的字符集。你必须做那个服务器端,我不认为你可以从客户端强制它。 (在请求标头中设置内容类型时,您要设置请求的内容类型 ,而不是响应。)例如,响应标头来自服务器将是:
Content-Type: text/plain; charset=windows-1252
...如果用“ANSI”表示Windows-1252字符集。这应该告诉浏览器在将响应文本交给JavaScript层之前需要做什么才能正确解码响应文本。
但有一个问题:据我所知,Windows-1252没有完整的Romanian alphabet。因此,如果您看到Ș
,ș
,Ţ
,ţ
等字符,则表明源文本不在Windows-1252中。现在,也许可以将变音符号放在罗马尼亚语中(我不知道),所以如果您的源文本仅使用S
和T
而不是Ș
和{{1等等,它仍然可以在Windows-1252中。或者它可能是ISO-8859或ISO-8859-2(两者都丢弃一些变音符号)或可能是ISO-8859-16(具有完全的罗马尼亚支持)。 Details here.
所以要做的第一件事就是确定源文本实际上是什么字符集。