所以我有一个网页,根据返回其内容的 HTTP header 以 ISO-8859 进行编码。我返回文本内容😳😳😳😳,正如预期的那样,它被 ISO 编码破坏了。
但是,当我进行返回相同文本内容😳😳😳😳的 JSONP AJAX 调用并将其插入到页面上时,这些表情符号会正确显示!值得注意的是,AJAX 调用缺少编码类型 header ,因为其 Content-Type header 只是 text/javascript。
这是怎么回事?我的 Chrome 浏览器是否采取了某种巧妙的技巧来确保 AJAX 内容正确显示?
如果重要的话,我正在使用 jQuery 库来执行 AJAX 调用。
最佳答案
这主要是猜测,因为我没有广泛研究它,但据我了解,浏览器将 HTML 文本内容转换为某种内部表示形式(也许是 UTF-16,我不知道)。我发现有提到here .
他们使用服务器( Content-Type
header )、HTML 本身( <meta charset=...
等)或用户(通过显式设置页面的编码)提供的线索来做到这一点。
任何被插入 DOM 的新文本内容(例如使用 AJAX 请求检索的文本内容)都会经历相同的转码。换句话说,浏览器不使用页面其余部分的编码(或者可能仅在它完全不知道编码何时使用的情况下),而是使用服务器在 AJAX 响应中提供的编码(或者如果服务器未设置,则使用默认值)。
因此,在内部,所有内容都会转换为相同的编码,这就是为什么您可以使用 JS 将 UTF-8 编码的数据注入(inject)到 ISO-8859 编码的页面中,并且它可以工作。
关于javascript - AJAX UTF-8 内容在 ISO-8859 编码页面上正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42651415/