通过JavaScript获取页面/iframe的编码

19

我希望能够通过JavaScript或其他浏览器API以编程方式确定页面的编码。我需要这个信息的原因是,我试图对主要浏览器进行字符编码测试,而仅仅发送适当的“Content-Type”并不意味着浏览器会正确处理编码。如果有其他可能的方法,我将非常欢迎,但我不想为50多种字符编码点击“页面信息”。


为什么你需要这些信息?我不明白它对你有什么用处。注意,即使支持编码也并不意味着太多。例如,IE支持UTF-8字符集......但无法呈现其他浏览器可以的大量特殊字符。一旦收集了这些数据,你打算做什么? - scunliffe
如果表单中存在编码错误,了解浏览器认为页面的字符集是什么可能会很有用。 - joar
2个回答

25

Javascript只能报告部分正在进行的事情。大多数浏览器不会向您公开足够有用的设置,以便您基于任何核心测试。

例如,document.inputEncodingdocument.characterSet(非IE)、document.charsetdocument.defaultCharset(IE)等内容可能会让您有所收获。但是这些可能与实际支持一样不稳定。也就是说,如果浏览器“认为”它支持某种编码,但实际上并不支持,那么这不是你想知道的吗?

我认为您最好的选择是设置一个动态测试页面,其中包含一些相当复杂的字符(或者一个非常大的测试集),在浏览器中进行负载测试,让浏览器返回浏览器ID字符串、编码设置、原始编码请求和testElement.innerHTML的内容,然后将其与预期结果进行验证。


8
“document.characterSet” 在最新版本的IE中(从IE 9开始)存在。现在使用它是完全安全的,除非你真的需要支持非常老的浏览器。 - Bjorn

8

原始答案现在已经过时,对于document.characterSet的支持已经得到了很大的改进。

>>> document.characterSet

IE 11:

"utf-8"

Firefox 52,Chrome 55和Android上的Chrome,Safari 10:

"UTF-8"

看起来对于大多数情况,你可以依靠这些信息来解决问题,只需处理不同的情况。在我的情况下,收集这些信息以进行跟踪是很有用的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接