Ошибки кодирования в .jspx - PullRequest
1 голос
/ 23 июля 2010

В настоящее время я пытаюсь развернуть несколько RSS-каналов на сервере приложений WebLogic.Представления каналов - это файлы .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>

Проблема в том, что на моем локальном сервере разработки (Apache Tomcat 6.0) все отображается нормально, но на сервере WebLogic я получаю всеСимволы UTF-8 обратно искажены.

В Firefox я вижу что-то вроде <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.

Я не уверен, что происходит, но я думаю, что это связаночто-то, что делает веб-сервер, учитывая, что на моем локальном Tomcat все в порядке.Любые идеи приветствуются.

Спасибо,
Алекс

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

Проблема возникла из-за порядка атрибутов в директиве jspx и того факта, что я не включил кодировку в атрибут contentType!

После переключения:

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

до:

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

Персонажи вышли хорошо. Я немного повозился и с любопытством обнаружил, что это:

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

не работает. Я не очень понимаю, почему, но я предполагаю, что это ошибка в WebLogic. Развернутая версия была 10.0.

1 голос
/ 23 июля 2010

- это символ замены Unicode U + FFFD (в шестнадцатеричном коде 0xEF 0xBF 0xBD).

Этот символ используется в Firefox для замены символа, чья кодовая точка Unicodeна самом деле лежит за пределами диапазона кодировки символов, браузер получил указание на визуализацию страницы.

Поскольку браузер получил указание визуализировать страницу в кодировке UTF-8, а символ изначально ó ( U + 00F3 , 0xC3 0xB3), который будет преобразован в неизвестный символ при декодировании с использованием однобайтовой кодировки в 0xF3 вместо 0xC3 0xB3, симптомы указывают на то, что на самом деле сервер расшифровывает ответ как ISO-8859-1 вместо UTF-8, но при этом инструктирует браузер кодировать его с использованием UTF-8.

Я не делаю Weblogic, поэтому немного погуглил иЯ наткнулся на этот старый отчет об ошибках , в котором предлагается добавить следующее к weblogic.xml файлу, чтобы заставить его анализировать файлы JSP с использованием 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>

Посмотрите, поможет ли эторешатьтвоя проблема.

...