【问题标题】:Javascript Charset problemJavascript字符集问题
【发布时间】:2011-07-14 11:14:59
【问题描述】:

我想用 javascript 从我的服务器读取文件并将其内容显示在 html 页面中。 该文件是 ANSI 字符集,它有罗马尼亚字符.. 我想以它们的方式显示这些字符:D 而不是不同的黑色符号..

所以我认为我的问题是字符集。我有一个获取文件内容的请求,如下所示:

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 上运行,至少不一定在所有浏览器中都可以使用。

【问题讨论】:

  • 内容类型需要是:text/html; charset=UTF-8
  • 你在那个文件中使用了什么Content-Type 标头?
  • 在文本编辑器中很好是 ansi :D 如果这是问题 :D,它不是一个 html 页面它只有文本 :D
  • 我试过 "text/html; charset=UTF-8" 但还是一样 :D
  • @Cata:这与您的文本编辑器的功能无关。 only 相关的是 Web 服务器为该特定文件返回的 Content-Type 标头。

标签: javascript character-encoding


【解决方案1】:

虽然我最初的假设与 T.J. Crowder 的 quick chat 确定 OP 使用了一些托管服务并且不能轻易更改 Content-Type 标头。

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

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

【讨论】:

  • 我一直在做一个只有 html 页面的原型,我正在创建页面,只需右键单击文件夹(Windows)和新文件......并且所有内容都使用 ANSI 保存(没有知道),在得到这个答案之前,我开始疯狂地想知道为什么 f"#$%ck UTF-8 元数据不起作用......现在我可以安心地再次编码了 :o)
【解决方案2】:

您需要确保返回文件数据的 HTTP 响应上标识了正确的字符集。你必须在服务器端做,我认为你不能从客户端强制它。 (当您在请求标头中设置内容类型时,您设置的是请求的内容类型,而不是响应。)例如,来自的 response 标头服务器将类似于:

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

...如果“ANSI”是指Windows-1252 字符集。这应该告诉浏览器在将响应文本传递给 JavaScript 层之前,它需要做什么才能正确解码响应文本。

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

因此,首先要做的是确定源文本实际使用的字符集。

【讨论】:

  • 我刚刚读到 HTML5 标准化了 "ISO-8859-1" 字符集声明必须被解释为 "Windows-1252"。最后。
  • 现在页面返回内容字符集:ISO-8859-1 与页面内容类似,但问题仍然相同..
  • @Cata:带有文件数据的响应具有那种内容类型?您确定这是源文本的字符集(不是 ISO-8859-2 或 -16)吗?如果两个问题的答案都是肯定的,恐怕我不知道它是什么。
  • 似乎包含内容的文件将内容字符集作为简单文本发送。我已将文件的字符集更改为 utf,现在一切都很好,感谢 Tomalak:D
猜你喜欢
  • 2010-10-01
  • 2013-08-30
  • 2011-04-20
  • 2011-03-19
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多