CSV 파일을 Excel에서 열면 분명히 Byte Order Mark가 있어야합니다. CSV 다운로드는 요청 중에 데이터가 생성되므로 컨트롤러의 HttpServletResponse
의 출력 스트림에 기록하여 구현됩니다. BOM 바이트 - java.io.CharConversionException: Not an ISO 8859-1 character: []
(지정된 인코딩이 UTF-8
임에도 불구하고)을 쓸 때 예외가 발생합니다. BOM을 사용하여 UTF-8로 인코딩 된 CSV 파일을 반환하는 Java Spring
훨씬 이해가되지 않습니다
@RequestMapping("/monthly/list")
public List<MonthlyDetailsItem> queryDetailsItems(
MonthlyDetailsItemQuery query,
@RequestParam(value = "format", required = false) String format,
@RequestParam(value = "attachment", required = false, defaultValue="false") Boolean attachment,
HttpServletResponse response) throws Exception
{
// load item list
List<MonthlyDetailsItem> list = detailsSvc.queryMonthlyDetailsForList(query);
// adjust format
format = format != null ? format.toLowerCase() : "json";
if (!Arrays.asList("json", "csv").contains(format)) format = "json";
// modify common response headers
response.setCharacterEncoding("UTF-8");
if (attachment)
response.setHeader("Content-Disposition", "attachment;filename=duomenys." + format);
// build csv
if ("csv".equals(format)) {
response.setContentType("text/csv; charset=UTF-8");
response.getOutputStream().print("\ufeff");
response.getOutputStream().write(buildMonthlyDetailsItemCsv(list).getBytes("UTF-8"));
return null;
}
return list;
}
BOM 부분에'response.getOutputStream(). write ("\ ufeff".getBytes ("UTF-8"));를 사용해 주시겠습니까? – Berger