特殊字符显示为?分数

duk*_*vin 2 html php unicode ajax encoding

我在这里有一些特殊字符:http:
//209.141.56.244/test/char.php

但是当我在这里通过ajax获取此文件时,它们会显示为返回?标记:http :
//209.141.56.244/test/char.html

这些字符应为"ISO-8859-1 Western",但将我的浏览器编码切换为任何选项都无济于事.

为什么这样,我该如何解决?

Tom*_*lak 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');
Run Code Online (Sandbox Code Playgroud)

PS:将浏览器切换到另一个字符集没有帮助,因为这只会影响页面本身.后续的Ajax响应仍然根据它们各自的头进行解码.

  • @Jared称之为有根据的猜测.OP声明了ISO-8859-1(无论如何在用户代理中用Windows-1252覆盖的设置).将charset设置为与实际数据不对应的任何内容都不会修复任何问题,因此只需指定UTF-8就不会神奇地使其正常. (2认同)