如何将 default.html 的字符编码设置为 UTF-8?

Posted

技术标签:

【中文标题】如何将 default.html 的字符编码设置为 UTF-8?【英文标题】:How do I set character encoding to UTF-8 for default.html? 【发布时间】:2009-05-25 02:57:41 【问题描述】:

我花了最后几个小时让我的网站验证html 4.01 Strict,实际上我已经成功了,但仍然有一个警告我无法摆脱。警告是:

字符编码不匹配!

中指定的字符编码 HTTP 标头 (iso-8859-1) 是 不同于中的值 元素(utf-8)。我将使用该值 来自 HTTP 标头 (iso-8859-1) 的 这个验证。

有问题的页面是www.dubiousarray.net/default.html。正如您从页面源代码中看到的那样,我有以下元元素:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

并且我已确保 default.html 文件以 UTF-8 编码保存。奇怪的是站点中的所有其他页面都在没有此警告的情况下进行验证,并且它们具有相同的元标记并且以完全相同的方式保存。我很确定这与服务器配置有关。 .htaccess 文件现在看起来像这样:

# Use php 5 as default
AddHandler application/x-httpd-php5 .php
AddDefaultCharset UTF-8

但是我已经尝试了this page 上显示的所有修复程序,但没有一个有效。我怎样才能摆脱这个警告?

在 Firefox 中,如果您右键单击页面并选择“查看页面信息”,default.html 显示为 ISO-8859-1,而所有其他页面显示为 UTF-8。

所有的 html 文件都以完全相同的方式创建和保存(字符编码设置为 UTF-8,不带BOM),但 default.html 是唯一不一样的文件显示为 UTF-8。所以我假设服务器正在对 default.html 文件做一些特殊的事情,尽管我不确定是什么,因为在 .htaccess 文件中没有它的迹象。 p>

【问题讨论】:

【参考方案1】:

您需要替换 HTTP 级别的标头。

这应该可行:

<?php
    header('Content-type: text/html; charset=utf-8');
?>

请注意,以上内容必须是您文件中的第一件事。没有例外。请参阅header

有关如何更改不同网络堆栈中的字符集标头的一般信息,请参阅Setting the HTTP charset parameter

【讨论】:

看起来它应该解决问题,因为它是在服务器弄乱它之后出现的,但由于我不再拥有导致问题的 default.html 文件,所以我无法对其进行测试。我会假设它会起作用:-)。 但这不适用于静态 HTML 页面(即使问题在配置文件中提到了一些不相关的 PHP 设置)。【参考方案2】:

服务器在 HTTP 标头中清楚地将文档标记为 ISO-8859-1。尝试使用 UTF-8 编码和适当的编辑器保存 default.html。

【讨论】:

default.html 文件已使用适当的编辑器保存为 UTF-8(确切地说是没有 BOM 的 UTF-8)。当我保存它时,我几乎可以肯定编码是正确的,因为当 Firefox 检查时,网站上的所有其他页面都显示为 UTF-8。服务器似乎对 default.html 文件做了一些特殊的事情。【参考方案3】:

将其包含在您的代码中:

&lt;meta charset="utf-8" /&gt;

【讨论】:

Re "in your code":你不是说在静态 HTML 文件中吗?【参考方案4】:

好的,我想出了部分解决方案来解决我的问题。由于只有 default.html 文件导致了警告,因此我认为服务器因其名称而对其进行了特殊处理。所以我创建了一个名为 home.html 的新文件,其内容与 default.html 文件相同,并将 .htaccess 文件指向新文件文件(见下面的第 3 行)。

# Use PHP5 as default
AddHandler application/x-httpd-php5 .php
DirectoryIndex home.html
AddDefaultCharset UTF-8

这解决了问题,现在所有文件都被识别为 UTF-8。我仍然不确定服务器对 default.html 文件做了什么或相关设置在哪里,但随着我的问题消失,我会忘记这一点。

【讨论】:

【参考方案5】:

.htaccess 中删除AddDefaultCharset 并检查编码。

我保存了您网页的 HTML 源代码并打开了它。编码被检测为 UTF-8。但是,在查看 Web 服务器提供的同一网页时,编码为 ISO-8859-1。这就是为什么我建议删除以前的冗余规则。

【讨论】:

我从 .htaccess 文件中删除了该规则,因为您是对的,这似乎是多余的,但它并没有采取任何措施来解决问题。

以上是关于如何将 default.html 的字符编码设置为 UTF-8?的主要内容,如果未能解决你的问题,请参考以下文章

如何摆脱警告:PWC4011:无法将请求字符编码设置为 UTF-8

使用 gcc 将字符串文字的编码设置为 latin1

如何将gbk 编码的字符串转换成 utf

如何设置Mysql数据库默认的字符集编码为GBK

如何设置Mysql数据库默认的字符集编码为GBK

在Linux如何让更改文件的字符编码