У меня есть проект с загрузкой Spring, и я пытаюсь загрузить файл csv, который содержит специальный символ т.е.: "ΕΛΙΑ ΚΑΤΑΣΚΕΥΑΣΤΙΚΗ Α.Ε." при обработке файла специальный символ заменяется следующим "???? ???????????????.?."
Контроллер
@RequestMapping(value = "/processfile", method = RequestMethod.POST)
public void processMultiPartFile(HttpServletRequest request, @RequestParam("files") MultipartFile[] files) {
for (MultipartFile file : files) {
System.out.println("File data-->>"+new String(file.getBytes(),"UTF-8"))
}
}
Попытка найти следующие решения, но пока безуспешно:
Решение 1: установить кодировку символов в запросе
request.setCharacterEncoding("UTF-8");
Решение 2: использовать inputtreamreader файла mutipartfile
BufferedReader in = new BufferedReader(new InputStreamReader(file.getInputStream(), "UTF-8"));
String line = null;
while((line = in.readLine()) != null) {
System.out.println("read data----->"+line);
}
Решение 3: попробуйте с CommonsMultipartResolver
exclude auto configuration by
@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
and add custom resolver
@Bean(name="multipartResolver")
public CommonsMultipartResolver multipartResolver(){
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
return resolver;
}
и добавьте следующую зависимость в pom.xml
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
Прикладная среда
- Платформа 1: Windows 7, развертывание и запуск на консоли (для локальной отладки)
- Платформа 2: Google Cloud, развертывание и запуск в AppEngine.
Примечание. При запуске приложения в IDE eclispse (Luna) в локальной системе выводится правильный вывод в консоли.