Символы GB18030 заменяются пустым пространством для имени файла при загрузке файла

#java #spring #http #jsp #servlets

#java #spring #http #jsp #сервлеты

Вопрос:

введите описание изображения здесь

Привет участникам форума,

Я не могу выяснить причину замены символов GB18030 пустыми пробелами при загрузке файла. Прикрепил мой код для вашей справки.

         request.setCharacterEncoding("UTF-8");
        String keyname = request.getParameter("keyname");
        String format = request.getParameter("format");

        // To be executed during check-out operation only.
        if (format != null amp;amp; keyname != null) {
            ByteArrayOutputStream inStream = null;
            try {
                pgpPublicKeyInfoDb = new PGPPublicKeyInfoDb();
                inStream = pgpPublicKeyInfoDb.checkOutPGPPublicKey(keyname, format);
                response.setContentLength(inStream.size());
                if (format.equals("ASC")) {
                    response.setContentType("application/asc; charset=UTF-8");
                    response.setHeader("Content-Disposition", "filename="   keyname   ".asc");
                } else {
                    response.setContentType("application/pgp; charset=UTF-8");
                    response.setHeader("Content-Disposition", "filename="   keyname   ".pgp");
                }
                inStream.writeTo(response.getOutputStream());
  

Ответ №1:

символы, отличные от ASCII, в параметрах имени файла недопустимы, и браузеры различаются в том, что они с ними делают.

Если вам нужно надежное и переносимое решение, вам необходимо использовать UTF-8 и экранирование, определенное вhttps://greenbytes.de/tech/webdav/rfc6266.html.