Я прочитал все вопросы, которые могут быть похожи на этот, но у меня все еще есть та же проблема.
Я пытаюсь отправить файл сервлету, используя этот код:
<%@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();
Есть идеи, как это исправить?