Как исправить кодирование в multiform / form-data на Tomcat? - PullRequest
0 голосов
/ 30 августа 2018

Я прочитал все вопросы, которые могут быть похожи на этот, но у меня все еще есть та же проблема.

Я пытаюсь отправить файл сервлету, используя этот код:

<%@page contentType="text/html; charset=ISO-8859-2"%>
...
request.setCharacterEncoding("ISO-8859-2");
...    
<form action="CabServlet" method="POST" enctype="multipart/form-data">
                                    <input type="file" name="cab" id="cab" class="custom-file-input" lang="pl">

А затем, читая это на стороне сервера:

response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("ISO-8859-2");
Part filePart = request.getPart("cab");

Я знаю, что использование кодировки ISO-8859-2 устарело, но это довольно старый проект, и я не могу его изменить (я могу в своих файлах, но я не могу изменить его глобально). Я также новичок в использовании JSP и сервлетов.

Проблема, с которой я столкнулся, заключается в том, что когда я получаю файл на Tomcat, который настроен для Windows, все в порядке. Но когда я пытаюсь запустить свой код на Tomcat, установленном в Linux, он не работает - я получаю файл с неправильной кодировкой, в результате чего польские символы «śćź ...» отображаются как «?». Файл, который я отправляю, является архивом .cab, и после прочтения и сохранения его в XML-файле возникают проблемы с кодировкой.

Я анализирую файл из кабины в XML следующим образом:

 DocumentBuilderFactory builderFactory = 
        DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
        Document doc = docBuilder.newDocument();
        // Root element
        Element root = doc.createElement("cabparser");
        root.setAttribute("version", getVersion());
        doc.appendChild(root);
        ...
        // Parse XML file to String format and then return it
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        //transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        DOMSource domSource = new DOMSource(doc);
        StringWriter writer = new StringWriter();
        StreamResult streamResult = new StreamResult(writer);
        transformer.transform(domSource,streamResult);

        return writer.toString();

Есть идеи, как это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...