我这里有一些特殊字符:
http://209.141.56.244/test/char.php
但是当我在这里通过ajax获取此文件时,它们会显示为返回?标记:
http://209.141.56.244/test/char.html
这些字符应为“ISO-8859-1 Western”,但将浏览器编码切换为任何选项都无济于事。
为什么会这样,我该如何解决?
答案 0 :(得分:5)
您的服务器将Ajax响应发送为text/html
,这使得浏览器采用UTF-8(这是默认值),但您的数据本身不是UTF-8。
将Ajax响应发送为text/html; Charset=Windows-1252
(您实际上并未使用ISO-8859-1),它应该可以正常工作。
header('Content-Type: text/html; Charset=Windows-1252');
PS:将浏览器切换到另一个字符集无济于事,因为这只会影响页面本身。后续的Ajax响应仍然会根据各自的头进行解码。
答案 1 :(得分:3)
您的网页将text/html
作为Content-Type
返回,因此浏览器(和ajax脚本)会使用当前上下文给出的默认编码对其进行解释。
在php中你可以使用header函数对html版本强制编码你应该使用apache配置文件(假设你使用的是apache,否则请看你的webserver doc)。
http://www.w3.org/International/O-HTTP-charset说
始终明确标记Web文档非常重要。 HTTP 1.1表示默认字符集是ISO-8859-1。但也有 其他编码中的许多未标记文档,因此浏览器使用 当没有明确的字符集时,读者的首选编码 参数。
来自同一页
<强>的Apache 即可。这可以通过AddCharset(Apache 1.3.10及更高版本)完成 或AddType指令,用于目录或个人资源 (文件)。使用AddDefaultCharset(Apache 1.3.12及更高版本),它是 可以为整个服务器设置默认字符集。更多 信息,请参阅Setting 'charset' information in .htaccess.
上的文章