我花了最后几个小时让我的网站验证HTML 4.01严格,我实际上已经成功,但仍然有一个我无法摆脱的警告.警告是:
字符编码不匹配!
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">
Run Code Online (Sandbox Code Playgroud)
我确保default.html文件使用UTF-8编码保存.奇怪的是,网站中的所有其他页面都在没有此警告的情况下进行验证,并且它们具有相同的元标记,并以完全相同的方式保存.我很确定它与服务器配置有关..htaccess文件目前看起来像这样:
# Use PHP5 as default
AddHandler application/x-httpd-php5 .php
AddDefaultCharset UTF-8
Run Code Online (Sandbox Code Playgroud)
但我已尝试过本页显示的所有修复程序,但没有一个能够正常工作.有没有人对如何摆脱这个警告有任何想法?最后一点,在Firefox中,如果右键单击页面并选择"查看页面信息",则default.html显示为ISO-8859-1,而所有其他页面显示为UTF-8.
谢谢你,雅各布
编辑:需要注意的是,所有的html文件都是以完全相同的方式创建和保存的(字符编码设置为UTF-8而没有BOM)但default.html是唯一一个不显示为UTF-8的文件.所以我假设服务器正在对default.html文件做一些特殊的事情,虽然我不确定.htaccess文件中没有它的标志.
我正在为一个大学项目编写一个Eclipse插件,并且需要能够在用户退出时运行代码,而我找不到正确的Listener来让我这样做.下面显示了类似代码的示例,其中我监听成功完成的保存事件并在发生这种情况时调用方法.
public class ExecutionListener implements IExecutionListener{
private DataCollector dataCollector;
public ExecutionListener(DataCollector dataCollector)
{
this.dataCollector = dataCollector;
}
public void postExecuteSuccess(String action, Object arg1)
{
if (action.equals("org.eclipse.ui.file.save")) {
dataCollector.writeDatabase();
}
}
Run Code Online (Sandbox Code Playgroud)
所以我想要的是一个监听器,它允许我监听退出事件并调用一个方法来运行我的代码.我想在运行代码之前我无法确保退出成功完成,但"退出前"监听器可以正常工作.此外,如果有人确实知道正确的监听器,他们也可以告诉我退出事件所需的commandId(例如,上例中的save事件的commandId是"org.eclipse.ui.file.save").
谢谢你,雅各布
编辑:回复javamonkey79的问题:
我像这样添加监听器:
/* Adds a listener to listen for file save events if needed. */
if (executionListener == null) {
ICommandService service = (ICommandService) Activator.getDefault().getWorkbench().
getService(ICommandService.class);
executionListener = new ExecutionListener();
service.addExecutionListener(executionListener);
}
Run Code Online (Sandbox Code Playgroud)