如何在Tomcat上修复多格式/表单数据中的编码?

时间:2018-08-30 11:47:00

标签: java jsp tomcat servlets

我已经阅读了所有可能与此问题类似的问题,但是我仍然遇到相同的问题。

我正在尝试使用以下代码将文件发送到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();

有什么解决方法吗?

0 个答案:

没有答案