CSVファイルをExcelで開くとExcelの開始時にByte Order Markが表示されるはずです。 CSVのダウンロードは、要求時にデータが生成されるため、コントローラのHttpServletResponse
の出力ストリームに書き込むことによって実装されます。 BOMバイト(が指定されていても、java.io.CharConversionException: Not an ISO 8859-1 character: []
)を書き込もうとすると例外が発生します。 Java SpringがBOMを使用してUTF-8でエンコードされたCSVファイルを返す
それはあまり意味がありません
@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