当前位置: 首页 > 知识库问答 >
问题:

导出文件csv java spring时出错日语字符

微生慈
2023-03-14

导出文件csv、文件excel时,无法正确显示日文字符。这是我的代码:

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);

}

这是我的控制器

@PostMapping(value=“/exportCsv”,products=“application/octet stream”)公共响应标题searchStudentExportCsv(@Valid@RequestBody SearchStudentReq req){返回studentService.searchStudentExportCsv(req);}

请帮帮我,谢谢!

共有1个答案

周睿范
2023-03-14
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();
}
 类似资料:
  • 我有一个JProfiler快照文件(.jps),它是使用脱机分析创建的。 当我试图使用JPexport脚本导出它时,出现以下错误: /opt/jprofiler9/bin$jpexport ~/test。jps热点~/热点。html加载/home/pavan/test。jps JProfiler尚未初始化。请先运行JProfiler可执行文件 请任何人详细说明这意味着什么,以及需要做什么才能成功地

  • 问题内容: 我正在尝试将大量插入表: 并得到此错误: 我也尝试使用sql导入和导出向导来导入文件。它以逗号分隔,并且出现以下错误: 我知道我的领域绝对足够大。这是表的create语句: 我肯定知道没有超过80个字符的列。我也尝试将其更改为500个字符,但仍然遇到相同的错误。 我究竟做错了什么? 为什么不能导入此文件? 这是以下行之一的示例:“ 139236748349”,“ 1”,“”,“,”,“

  • 如果路径下有相同命名的文件,新文件会覆盖老文件 $config = [ 'path' => '/home/viest' // xlsx文件保存路径 ]; $excel = new \Vtiful\Kernel\Excel($config); ​ // fileName 会自动创建一个工作表,你可以自定义该工作表名称,工作表名称为可选参数 $filePath = $excel->fileN

  • 问题内容: 两个问题 1)将Java项目导出为JAR文件时,应用程序如何知道包中的哪个类首先运行?我的applicatino特别要求userInterface.java文件在CommonDenom.java文件之前运行。 2)运行Java文件时,出现错误消息“无法启动Java JAR文件“ commonDenom.jar”。请在控制台中查看可能的消息。” 我从哪里开始弄清楚这一点?我检查了控制台,

  • 问题内容: 我有时间表的数据库表,其中包含一些常见的字段。 还有更多,但这就是要点。 我已经在该表上导出了一个导出到CSV文件的导出文件,以向用户提供其数据的备份。它也用作带有某些自定义报告的宏Excel文件的数据导入。 这一切都与我合作,通过php遍历时间表并将行打印到文件中。 问题在于大型数据库可能需要花费数小时才能运行,这是无法接受的。所以我用MySQL 命令重写了它,并将它减少到几秒钟即可

  • 在我的项目中已经安装了opencv,但是导入的C++文件出现了错误 null