这真的让我很烦,所以我希望有人能告诉我我做错了什么。我已经在 Windows 7 笔记本电脑上运行 Apache Web 服务器一段时间了,现在,为了测试我在业余时间做的一些编程。最近,我注意到我的页面中的 Unicode 字符无法在浏览器中正确显示。我做了很多毫无意义的测试,发现这些字符实际上是以正确的 UTF-8 发送的,我还在<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
我的 html 输出顶部添加了一行,这是为了解决问题,但实际上并没有做任何事情。然后,我花时间检查 HTTP 响应标头,发现 Apache 正在发回以下内容:
HTTP/1.1 200 正常 日期:2015 年 7 月 19 日星期日 18:18:40 GMT 服务器:Apache/2.2.25(Win32) 传输编码:分块 内容类型:text/html;字符集=iso-8859-1
好的,这似乎是一个非常简单的问题。根据互联网,我可以通过添加AddDefaultCharset utf-8
到我的 httpd.conf 文件中来解决这个问题。文件中任何地方都没有任何AddDefaultCharset
行,所以我在底部添加了它,就像上面的拼写一样。然后我重新启动了 Apache 服务,发现问题没有改变。因此,我重新启动了计算机,理论上我可能不知道如何正确重新启动 Apache,但它仍然无法正确显示字符,并且它仍在发送charset=iso-8859-1
标头。
我还发现一个网站,上面说 Windows VirtualStore 可能会自动将配置文件保存到其他地方,只是为了捉弄我,但我不相信这是真的,因为我在 VirtualStore 目录中找不到任何 Apache 文件。另外,你应该能够通过取得文件夹的所有权来禁用 VirtualStore,我之前这样做过,因为它不允许我更改任何其他内容。
不幸的是,我甚至不知道针对这个问题还需要注意什么。有人有什么想法吗?
答案1
尝试创建一个 3 行 HTML 文件,从浏览器请求它,然后检查标头。这样做可确保没有 CGI 标头或任何干扰服务器配置的内容。
<html><head><title>Some Test file</title></head>
<body>unicode test äöüÄÖÜß</body>
</html>
继续调整服务器配置,直到该文件charset=utf-8
在 Content-type 标头中带有规范地发送。
接下来尝试一个最小的 perl 程序:
#!/usr/bin/perl <-- or omit this line as you're on windows
binmode(STDOUT, ":utf8");
print qq(Content-type: text/html; charset=utf-8
<html><head><title>Some Test file</title></head>
<body>unicode test äöüÄÖÜß</body>
</html>
);
如果这有效(发送正确的标题),那么其他不起作用的任何东西都在您的库中,而不是您的服务器配置中。