首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.jspx中的编码错误

.jspx中的编码错误
EN

Stack Overflow用户
提问于 2010-07-23 19:31:26
回答 2查看 2.4K关注 0票数 1

我目前正在尝试在WebLogic应用服务器上部署一些RSS。提要的视图是.jspx文件,如下图所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" 
    xmlns:georss="http://www.georss.org/georss"
    xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
    xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    xmlns:util="http://example.com/util">
    <jsp:directive.page pageEncoding="utf-8" contentType="application/xhtml+xml" /> 

    <jsp:useBean id="now" class="java.util.Date" scope="page" />

    [...]

    <c:forEach var="category" items="${categories}">
    <entry>
        <title>${util:htmlEscape(category.label)}</title>
        <id>${category.id}</id>
        <c:if test="${empty parentId}">
        <link href="${util:htmlEscape(fullRequest)}?parentId=${category.id}" />
        </c:if>
        <summary>${util:htmlEscape(category.localizedLabel)}</summary> 
    </entry>
    </c:forEach>
</feed>

问题是,在我的本地开发服务器(Apache Tomcat6.0)上,一切都呈现得很好,但在WebLogic服务器上,我得到的所有UTF-8字符都被破坏了。

在火狐中,我看到了类似<summary>Formaci�n</summary>的东西。这个奇怪字符的字节序列是ef bf bd,而我在执行测试时应该收到的所有UTF-8字符似乎都是这样的(α,ó,í)。我已经检查了firebug中的内容类型和编码,看起来没问题(Content-Type: application/xhtml+xml; charset=UTF-8)。

在Chrome中,内容会在第一次出现奇怪的字符时进行调整,并显示错误消息:This page contains the following errors: error on line 1 at column 523: Encoding error

我不确定发生了什么,但我认为这与web服务器正在做的事情有关,考虑到在我本地的Tomcat上一切正常。欢迎任何想法。

谢谢,

亚历克斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-28 18:02:44

问题来自于jspx指令中属性的顺序,以及我没有在contentType属性中包含字符集的事实!

切换后:

代码语言:javascript
复制
<jsp:directive.page pageEncoding="utf-8" contentType="application/xhtml+xml" />

至:

代码语言:javascript
复制
<jsp:directive.page contentType="application/xhtml+xml; charset=UTF-8" 
     pageEncoding="UTF-8" />

人物表现得很好。我又折腾了一下,好奇地发现:

代码语言:javascript
复制
<jsp:directive.page pageEncoding="UTF-8"
      contentType="application/xhtml+xml; charset=UTF-8" />

不能工作。我真的不明白为什么,但我猜这是WebLogic中的一个bug。我部署的版本是10.0。

票数 2
EN

Stack Overflow用户

发布于 2010-07-23 23:08:08

Unicode Replacement Character U+FFFD (十六进制,实际上是0xEF 0xBF 0xBD)。

此字符在Firefox中用于替换其unicode代码点实际上位于指示浏览器呈现页面的字符编码范围之外的字符。

由于指示浏览器以UTF-8格式呈现页面,并且字符最初是ó (U+00F30xC3 0xB3),当使用单字节字符集将其解码为0xF3而不是0xC3 0xB3时,该字符将被错误地格式化为未知字符,症状表明服务器实际上正在将响应解码为ISO-8859-1而不是UTF-8,但仍指示浏览器使用UTF-8对其进行编码。

我不做Weblogic,所以我用谷歌搜索了一下,我偶然发现了this old bug report,其中有人建议在weblogic.xml文件中添加以下内容,以强制它使用UTF8解析JSP文件。

代码语言:javascript
复制
<weblogic-web-app>
    <jsp-descriptor>
        <jsp-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </jsp-param>
        <jsp-param>
            <param-name>compilerSupportsEncoding</param-name>
            <param-value>false</param-value>
        </jsp-param>
    </jsp-descriptor>
</weblogic-web-app>

看看这是否有助于解决你的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3317711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档