Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java .jspx中的编码错误_Java_Unicode_Character Encoding_Weblogic_Jspx - Fatal编程技术网

Java .jspx中的编码错误

Java .jspx中的编码错误,java,unicode,character-encoding,weblogic,jspx,Java,Unicode,Character Encoding,Weblogic,Jspx,我目前正在尝试在WebLogic应用服务器上部署一些RSS源。提要的视图是.jspx文件,如下所示: <?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="ht

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

<?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>

[...]
${util:htmlEscape(category.label)}
${category.id}
${util:htmlEscape(category.localizedLabel)}
问题是,在我的本地开发服务器(ApacheTomcat6.0)上,一切都很好,但在WebLogic服务器上,我将所有UTF-8字符重新处理

在Firefox中,我看到类似
Formaci的东西�n
。奇怪字符的字节序列是
ef-bf-bd
,对于我在进行的测试中应该接收的所有UTF-8字符,我似乎都得到了它(á,ó,í)。我已经检查了firebug中的内容类型和编码,看起来还可以(
内容类型:application/xhtml+xml;charset=UTF-8

在Chrome中,内容在第一次出现奇怪字符时被解释,并显示错误消息:
此页面包含以下错误:第523列第1行错误:编码错误

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

谢谢,

亚历克斯

这个
是(十六进制格式的确实
0xEF 0xBF 0xBD

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

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

<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>
我不做Weblogic,所以我在谷歌上搜索了一下,发现有人建议在
Weblogic.xml
文件中添加以下内容,以强制它使用UTF-8解析JSP文件

<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>

编码
UTF-8
编译器支持编码
假的

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

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

切换后:

<jsp:directive.page pageEncoding="utf-8" contentType="application/xhtml+xml" />

致:


这些角色演得很好。我又拨弄了一下,奇怪的是,我发现:

<jsp:directive.page pageEncoding="UTF-8"
      contentType="application/xhtml+xml; charset=UTF-8" />


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

util:htmlEscape()到底在做什么?没错,这是转义HTML,但我想知道为什么不使用JSTL提供的
fn:escapeXml()
。这可能是编码问题的根本原因。顺便说一句,xml名称空间中有一个输入错误
hputil
vs
util
。我是Java/jsp(x)新手,没有找到用于转义的库函数,因此我编写了自己的:)。我会用你建议的替换它,但我很确定我的功能不是问题所在。我没有打电话就试过了,但是UTF-8的字符还是被弄坏了。谢谢你的回复!它帮助我更好地理解发生了什么。我最终发现了这个问题,我已经发布了回复。我尝试了您建议的配置示例,但当我尝试将其推送到服务器时,它给了我一个错误,所以我开始尝试其他东西:)。再次谢谢你,亚历克斯。哇,这太糟糕了。好发现!