Java 为什么我的HTML验证程序不断报告与页面不同的编码?

Java 为什么我的HTML验证程序不断报告与页面不同的编码?,java,jsp,tomcat,encoding,Java,Jsp,Tomcat,Encoding,我正在使用一个实例验证站点,但它不断告诉我编码不匹配: 内部编码声明“iso-8859-1”与实际编码不一致 文件编码(“utf-8”) 我已经尽了一切努力尝试将编码强制为iso-8859-1,因为我们使用的是需要这种编码的遗留数据库 启动的过程强制执行LANG='iso-8859-1' 在tomcat启动时强制执行file.encoding,这可以通过检查报告iso-8859-1的Charset.defaultCharset()来确认 Maven项目资源是通过iso-8859-1复制的:iso

我正在使用一个实例验证站点,但它不断告诉我编码不匹配:

内部编码声明“iso-8859-1”与实际编码不一致 文件编码(“utf-8”)

我已经尽了一切努力尝试将编码强制为iso-8859-1,因为我们使用的是需要这种编码的遗留数据库

  • 启动的过程强制执行
    LANG='iso-8859-1'
  • 在tomcat启动时强制执行
    file.encoding
    ,这可以通过检查报告
    iso-8859-1
    Charset.defaultCharset()
    来确认
  • Maven项目资源是通过
    iso-8859-1
    复制的:
    iso-8859-1
  • JSP
    page
    指令指定编码:
  • 内容类型已在页眉中设置:
  • Tomcat
    URIEncoding
    set:
  • 我还遗漏了什么导致页面返回为
    utf-8

    有趣的是,它正确地呈现了像©这样的字符,如果将©放在文本输入中,它将使用8859-1代码页正确地保存到DB中

    更新:我刚刚决定使用cURL从服务器下载一个页面,并将其上载到已成功验证的页面。它唯一的问题是
    iso-8859-1
    的命名应该是
    windows-1252
    ,尽管我认为这两个字符集略有不同,但如果不是这样,我需要研究一下

    这看起来越来越像一个bug,我也将研究它。

    尝试添加一个过滤器(用web.xml中的
    标记声明的
    javax.servlet.filter的实例)这将在进入
    doFilter()
    方法的
    ServletRequest
    ServletResponse
    实例上设置所需的字符编码作为参数


    请参阅javadoc和。

    我发现了问题

    文档很好,服务器很好,验证器-实际上验证很好。在发送给验证器并给我一个错误之前,更改页面编码的是

    我从上的帮助中得出了这一结论,并将从更改为,这将正确验证我的文档。现在使用本地验证器实例可以很好地进行验证


    我已经使用了最初的firefox插件。

    您是否检查了服务器返回的HTTP
    内容类型
    标题?@artbristol,firebug将响应标题报告为:
    内容类型文本/html;charset=ISO-8859-1
    根据验证程序邮件列表中的建议,请指定页面的URL,允许人们访问实际的HTTP头和发送的实际数据。@JukkaK.Korpela,很遗憾,我没有访问权限,该应用程序是一个内部应用程序,我没有访问公共tomcat实例的权限。@JukkaK.Korpela,我已经设法借用了一个端点来承载测试。因此,尽管我无法长时间完成此操作:。是的,我尝试添加的spring实现,但没有成功。@BrettRyan只是想确定:您是否强制执行了筛选器的字符编码(init param forceEncoding=true)?另外,如果您使用的是SpringMVC,那么这种情况可能会有所帮助:我没有使用Spring,只是觉得我应该尝试一个经过验证的过滤器,是的,我确实尝试了强制编码。实际上,我开始认为是验证程序告诉了我错误的事情,我看不到任何证据表明返回的页面是用utf-8编码的。使用验证程序插件的一个相当恼人的副作用是它只传递URL而不是页面内容。如果请求参数用于生成页面内容,并且url已被重写,则不可能使用验证器返回相同的页面,因此它不会验证您正在查看的内容。