我已经阅读了所有可能与此问题类似的问题,但是我仍然遇到相同的问题。
我正在尝试使用以下代码将文件发送到servlet:
<%@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和servlet的人的新手。
我遇到的问题是,当我在Windows上设置的Tomcat上收到文件时,一切正常。但是,当我尝试在Linux上的Tomcat上运行我的代码时,该代码无法正常工作-我收到的文件编码错误,这会使波兰字符“śćź...”显示为“?”。我要发送的文件是.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();
有什么解决方法吗?