#jsp #tomcat #localization #export
#jsp #tomcat #локализация #экспорт
Вопрос:
У меня есть tomcat6 и я использую в нем приложение Open report. когда я экспортирую любой отчет в формате Excel или pdf, он не поддерживает арабский язык. Пожалуйста, кто-нибудь может мне помочь? вы можете найти ниже код страницы jsp.
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<%@page import="org.efs.openreports.util.DisplayProperty"%>
<%@page import="org.efs.openreports.objects.Report"%>
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<s:include value="Banner.jsp" />
<s:if test="report == null || !report.isDisplayInline()">
<a class="back-link img-report-small" href="reportList.action"><s:text name="link.back.reports"/></a>
<a class="back-link img-group-small" href="reportGroup.action"><s:text name="link.back.groups"/></a>
<br/>
<s:actionerror/>
<div align="center">
<div class="important img-queryreport" id="instructions"><s:property value="report.name"/></div>
</div>
</s:if>
<div align="center">
<s:set name="results" value="results" scope="request" />
<s:set name="properties" value="properties" scope="request" />
<s:set name="report" value="report" scope="request" />
<% DisplayProperty[] displayProperties = (DisplayProperty[]) request.getAttribute("properties");
request.setCharacterEncoding("UTF-8");
Report report = (Report) request.getAttribute("report");%>
<display:table name="results" class="displayTag" sort="list" export="true" pagesize="20" requestURI="queryReportResult.action?tab=PRODUCTIVITY" excludedParams="org.apache.struts.taglib.html.TOKEN">
<% for (int i=0; i < displayProperties.length; i ) { %>
<display:column property="<%=displayProperties[i].getName()%>" title="<%=displayProperties[i].getDisplayName()%>" sortable="true" headerClass="sortable" />
<% } %>
<display:setProperty name="export.pdf" value="true"/>
<display:setProperty name="export.xml.filename" value="<%=report.getName() ".xml"%>"/>
<display:setProperty name="export.pdf.filename" value="<%=report.getName() ".pdf"%>"/>
<display:setProperty name="export.csv.filename" value="<%=report.getName() ".csv"%>"/>
<display:setProperty name="export.excel.filename" value="<%=report.getName() ".xls"%>"/>
</display:table>
<s:if test="#session.user.scheduler">
<s:text name="queryReport.scheduleReport"/>
<a href="reportOptions.action?reportId=<%=report.getId()%>amp;submitSchedule=trueamp;exportType=3">CSV</a> |
<a href="reportOptions.action?reportId=<%=report.getId()%>amp;submitSchedule=trueamp;exportType=1">Excel</a> |
<a href="reportOptions.action?reportId=<%=report.getId()%>amp;submitSchedule=trueamp;exportType=0">PDF</a>
</s:if>
</div>
<s:if test="report == null || !report.isDisplayInline()">
<s:include value="Footer.jsp" />
</s:if>
помогите мне быстро, пожалуйста…
Комментарии:
1. Что вы подразумеваете под «не поддерживает арабский»? Повреждены ли символы? Неправильное направление текста? Что-то еще? «помогите мне быстро» здесь работает не очень хорошо, особенно когда предоставленной вами информации недостаточно…
Ответ №1:
Я столкнулся с аналогичной проблемой в JBoss, используя Displaytag 1.2, выбранный из приложения Stripes MVC.
Когда база данных (MySQL) выдавала строки, содержащие символы скандинавского языка, закодированные в UTF-8, тогда экспорт этих таблиц в CSV и Excel был поврежден, т.Е. загруженный файл не содержал данных или небольшого количества бесполезных поврежденных данных.
Я думаю, что основная проблема, связанная с данными, касалась кодировок финских символов, которые указаны в ISO-8859-1, но не в UTF-8 (cfr. http://en.wikipedia.org/wiki/ISO/IEC_8859-1 ).
Исправление, которое работает для меня, заключалось в:
-
добавление этого в компонент Stripes Action:
getContext().getResponse().setCharacterEncoding("UTF-8"); getContext().getResponse().setContentType("application/vnd.ms-excel;charset=UTF-8");
-
добавление этого в соответствующий JSP:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
После этого я успешно могу загружать файлы CSV и Excel из таблицы Displaytag, содержащей данные, закодированные символами UTF-8 со скандинавских языков.
Ответ №2:
После поиска я нашел решение для этого случая: вы должны добавить
response.setContentType(«application/vnd.ms-excel;charset=Cp1256»);
вместо:
request.setCharacterEncoding(«UTF-8»);
в <% DisplayProperty …..> строка
для выгоды
Ответ №3:
Мы используем DisplayTag 1.1.1, и у нас возникла проблема со специальной кодировкой символов (UTF-8) при экспорте в Excel / CSV. После некоторого поиска мы смогли устранить проблему, добавив спецификацию перед строкой экспорта в writeExport() в TableTag.java класс.
Пример:
JspWriter lOut = PageContext.getOut();
…
lOut.write(‘ ufeff’);
lOut.write(pExportString);
Это работает хорошо (корректно отображать специальные символы), за исключением вывода xls, все данные отображаются в одной ячейке в Excel 2010, хотя вывод CSV отображается правильно. разделитель t -TAB не работал после добавления спецификации. Но если мы заменим t запятой (,) , он работает, как и ожидалось, в Excel 2010.