Java Servlet不';t将上传的文件解析为UTF-8

Java Servlet不';t将上传的文件解析为UTF-8,java,jakarta-ee,servlets,encoding,utf-8,Java,Jakarta Ee,Servlets,Encoding,Utf 8,我在上传和解析UTF-8字符串文件时遇到问题。我使用以下代码: protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Part filePart = request.getPart("file"); InputStream filecontent = filePart.getInp

我在上传和解析UTF-8字符串文件时遇到问题。我使用以下代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
    Part filePart = request.getPart("file");
    InputStream filecontent = filePart.getInputStream();
    // ...
}
我的网页如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <form action="UploadServlet" method="post" enctype="multipart/form-data">
      <input type="file" name="file" />
      <input type="submit" />
    </form>
  </body>
</html>


我在JavaWebApps中找到了一个关于UTF-8编码的好方法,但不幸的是,它对我不起作用。在NetBeans调试器中,字符串中仍然有随机符号,当我在网页上显示这些符号时,尽管大多数符号显示正确,但一些西里尔字母(k,С,Б,А)会被替换为'�?'

javax.servlet.http.Part
,您在代码的第一行中使用的,有一个方法
getContentType()
,它将告诉您上传表单数据的内容类型。到目前为止,您编写的任何内容都不会将上载的表单数据约束到任何特定的字符集;因此,您需要确定字符集并进行相应处理。

使用HTML表单上载的文件不使用任何字符编码。文件按原样逐字节传输。请参见“多部分/表单数据”下的

因此,如果客户端的原始文件是采用UTF-8字符编码的文本文件,那么服务器端的原始文件也是UTF-8

然后,您可以使用InputStreamReader将字节解码为UTF-8文本:

InputStreamReader reader = new InputStreamReader(filecontent, "UTF-8");

就是这样。

问题出在使用该文件内容流的代码中,您还没有向我们展示。@b我不是故意展示它的,因为我从桌面应用程序移植了它,它在那里工作得很好。您可能有不同的默认编码。