2016-09-15 6 views
1

У меня есть приложение с Struts 1.2 и в .jsp Я создал форму, используя тег HTML, это часть моего кода:Кодирование вопрос в HTML: форма с Struts 1.2

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://struts.apache.org/tags-html-el" prefix="html" %> 
... 
<html:form action="/myAction" method="post"> 
... 
    <display:table name="ListOfEntries" sort="external" requestURI="/myEntryAction.do" uid="row"> 
    ... 
    <display:column titleKey="label.label" sortable="true" sortProperty="label"> 
     <span id="staticlabel<c:out value="${row.id}" />"> 
     <bean:write name="row" property="label" /> 
     </span> 
     <html:text name="MyEntryForm" property="editedEntry.label" value="${row.label}" disabled="true" style="display:none" size="35"/> 
    </display:column> 

Итак, когда редактирование записи со специальным символом Ç, в моем MyEntryForm Я получаю его как Ã.

Заранее спасибо.

ОБНОВЛЕНИЕ: Я забыл упомянуть, что я использую Weblogic.

+0

пожалуйста подробная информация о вашем потоке данных. Вы сохраняете данные в базе данных? возможно, ваш db не готов к utf-8. – dit

+0

Проблема заключается в том, когда я редактирую запись, до того, как символ в порядке, в базе данных хранится как 'Ç'. Конечно, если я сохраню отредактированную запись, то в базе данных будет неправильно. – Alavaros

ответ

0

Я нашел, в чем была проблема.

В вопросе я забыл упомянуть, что я использую Weblogic как сервер. Отладка с помощью Firefox или Chrome я проверил, что запрос из моего браузера правильный, с правильным символом, поэтому он должен быть сервером.

В моем проекте, у меня есть weblogic.xml с этим содержанием:

<?xml version="1.0" encoding="UTF-8"?> 

<weblogic-web-app 
    xmlns="http://www.bea.com/ns/weblogic/90" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 
    http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd"> 

<description>My Struts Application</description> 

<context-root>RootOfMyApplication</context-root> 

<container-descriptor> 
    <prefer-web-inf-classes>true</prefer-web-inf-classes> 
    <show-archived-real-path-enabled>true</show-archived-real-path-enabled> 
</container-descriptor> 

</weblogic-web-app> 

И я, добавив это проблема была решена:

<charset-params> 
    <input-charset> 
     <resource-path>/*</resource-path> 
     <java-charset-name>UTF-8</java-charset-name> 
    </input-charset> 
</charset-params> 
1

Я вижу здесь несколько возможных проблем и решений.

1) Чтобы правильно декодировать HTML-файл, ваш должен рассказать вашему браузеру, какую кодировку использовать. Вы можете сообщить об этом ему, установив charset parameter или установив meta tag. В вашем HTML, добавьте этот мета-тег и убедиться, что делает его выглядеть прямо в браузере:

для HTML4: <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

для HTML5: <meta charset="utf-8">


2) HTML, мета тег игнорируется, когда страница передается по HTTP. Он используется только тогда, когда страница хранится клиентом в виде файла HTML на локальной дисковой системе и затем открывается файлом: // URI в браузере.

Поэтому может быть, что кодирование тела запроса HTTP, по-видимому, не было установлено в UTF-8. Кодирование тело запроса должно быть установлено

request.setCharacterEncoding("UTF-8"); 

3) изменить кодировку соединения с базой данных

Следующая команда должна использоваться всегда сразу после открытия подключения к базе UTF-8:

... 
mysql_connect(); 
mysql_query("SET NAMES 'utf8'"); 

4) Проверьте кодировку базы данных. Вы можете изменить кодировку базы данных с:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

5) Кроме того, файл должен быть записан в формате UTF-8. Например, в Eclipse: щелкните левой кнопкой мыши по файлу -> Свойства -> Проверить -> Текстовое кодирование. Или сделайте это в Notepad ++.


Так что это наиболее распространенные проблемы. Если это не сработает, сообщите нам дополнительную информацию по вашей проблеме. Но основная идея на самом деле всегда одна и та же: , если вы объединяете разные инструменты и объединяете их, каждый из них должен знать, какая кодировка используется в другом инструменте.И многие из проблем вызваны тем, что один инструмент не понимает, какая кодировка фактически используется другим инструментом.

+0

Отличный ответ vlad_rad, спасибо !. Но я обнаружил, в чем проблема, я отвечаю на собственный вопрос. – Alavaros