Reputation: 31
When export file csv, file excel, Japanese character cannot be shown correctly. This my code:
public ResponseEntity<byte[]> searchStudentExportCsv(Page<SearchStudentRes> studentClasses) {
HttpHeaders respHeader = new HttpHeaders();
respHeader.set("Content-disposition", "attachment; filename=students.csv");
StringWriter output = new StringWriter();
String[] csvHeaders = {
InternationalizationMessage.getString("csvfieldname.className"),
InternationalizationMessage.getString("csvfieldname.startDate"),
InternationalizationMessage.getString("csvfieldname.endDate"),
InternationalizationMessage.getString("csvfieldname.startTime"),
InternationalizationMessage.getString("csvfieldname.endTime"),
InternationalizationMessage.getString("csvfieldname.grade"),
InternationalizationMessage.getString("csvfieldname.place"),
InternationalizationMessage.getString("csvfieldname.studentName")
};
try {
CSVPrinter printer = new CSVPrinter(output, CSVFormat.DEFAULT.withHeader(csvHeaders));
studentClasses.forEach(
searchStudentRes -> {
try {
printer.printRecord(
searchStudentRes.getClassName(),
searchStudentRes.getStartDate(),
searchStudentRes.getEndDate(),
searchStudentRes.getStartTime(),
searchStudentRes.getEndTime(),
searchStudentRes.getGrade(),
searchStudentRes.getPlace(),
searchStudentRes.getStudentName()
} catch (IOException e) {
log.error(e.getMessage(), e);
}
});
} catch (IOException e) {
log.error(e.getMessage(), e);
}
return new ResponseEntity(
output.toString().getBytes(Charset.forName("UTF-8")), respHeader, HttpStatus.OK);
}
And this is my Controller
@PostMapping(value = "/exportCsv", produces = "application/octet-stream") public ResponseEntity searchStudentExportCsv(@Valid @RequestBody SearchStudentReq req) { return studentService.searchStudentExportCsv(req); }
Please help me, Thanks You!
Upvotes: 1
Views: 2826
Reputation: 31
public void exportCsv2(HttpServletResponse response) throws IOException {
List<Person> list = new ArrayList<>();
Person person1 = new Person(1, "チャウ クエ ギー", 23);
Person person2 = new Person(2, "グエン イエン タイン", 24);
Person person3 = new Person(3, "ファン ティ タイン トウイ", 25);
Person person4 = new Person(4, "ホアン ガー れ テイ トゥ ウエン", 26);
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
String[] headers = {"ID", "Name", "Age"};
response.setContentType("application/vnd.ms-excel:UTF-8"); // or you can use text/csv
response.setHeader("Content-Disposition", "attachment; filename=listPerson.csv");
OutputStream outputStream= response.getOutputStream();
outputStream.write(0xEF);
outputStream.write(0xBB);
outputStream.write(0xBF);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader(headers));
list.forEach(person -> {
try {
csvPrinter.printRecord(person.getId(),person.getName(),person.getAge());
} catch (IOException e) {
System.err.println(e.getMessage());
}
});
csvPrinter.close();
}
Upvotes: 1