字符编码- Javascript字符集问题

character encoding - Javascript Charset problem

本文关键字:字符集 问题 Javascript 编码 字符      更新时间:2023-09-26

我想用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格式的,我有一个meta标签,告诉浏览器这个页面有utf-8内容。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

所以如果我向服务器查询直接文件,浏览器会显示罗马尼亚字符,但是如果我通过这个脚本显示页面内容,我只会看到符号而不是字符。那么我做错了什么呢?

谢谢!

PS:我希望这至少能在Firefox上工作,而不一定在所有浏览器上。

虽然我最初的假设与T.J. Crowder的假设相同,但快速聊天确定OP使用一些托管服务,并且不能轻松更改Content-Type头。

文件作为text/plaintext/html发送,没有任何Charset参数,因此浏览器将它们解释为UTF-8(这是默认的)。

所以文件保存为UTF-8(而不是ANSI/Windows-1252)就成功了。

您需要确保返回文件数据的HTTP响应具有正确标识的字符集。你必须在服务器端完成,我不认为你可以从客户端强制完成。(当您在请求报头中设置内容类型时,您是在设置请求的内容类型,而不是响应。)例如,来自服务器的响应报头应该是这样的:

Content-Type: text/plain; charset=windows-1252

…如果你说的"ANSI"指的是Windows-1252字符集。这应该告诉浏览器,在将响应文本传递给JavaScript层之前,它需要做些什么来正确解码响应文本。

不过有一个问题:据我所知,Windows-1252没有完整的罗马尼亚字母。因此,如果您看到像Ș, ș, Ţ, ţ等字符,这表明源文本不是Windows-1252。现在,也许可以在罗马尼亚语中删除变音符(我不知道),所以如果你的源文本只是使用ST而不是ȘŢ等,它可能仍然在Windows-1252中。或者它可能是ISO-8859或ISO-8859-2(两者都省略了一些变音符号)或可能是ISO-8859-16(完全支持罗马尼亚语)。细节。

首先要做的是确定源文本的实际字符集