Экспорт в Excel, PDF, CSV-файл не поддерживает арабский язык

#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 ).

Исправление, которое работает для меня, заключалось в:

  1. добавление этого в компонент Stripes Action:

     getContext().getResponse().setCharacterEncoding("UTF-8");
    getContext().getResponse().setContentType("application/vnd.ms-excel;charset=UTF-8");
      
  2. добавление этого в соответствующий 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.