【发布时间】:2016-11-21 04:41:27
【问题描述】:
以下是用于生成 CSV 文件的 java 代码。尽管在调试此report.getEncoding() 时获取了“UTF-8”的值,但生成的文件使用了不正确的字符集。
public void generateFile(ReportBean<T> report, String filename, ReportAggregationPosition reportAggregationPosition) throws IOException {
try (PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(filename), report.getEncoding()))) {
List<T> filteredResult = new ArrayList();
for (T row : report.getResult()) {
if (logRow(row)) {
log.info("Logging row for report={} - {}", filename, getText(row));
}
if (ignoreRow(row)) {
log.info("Ignoring row for report={} - {}", filename, getText(row));
continue;
}
filteredResult.add(row);
}
if (reportAggregationPosition == ReportAggregationPosition.FIRST) {
out.println(filteredResult.size());
}
out.print(getHeader());
if (reportAggregationPosition == ReportAggregationPosition.SECOND) {
out.println(filteredResult.size());
}
for (T row : filteredResult) {
out.print(getText(row));
}
if (reportAggregationPosition == ReportAggregationPosition.LAST) {
out.println(String.format("Total number of rows: %s", filteredResult.size()));
}
}
期望值为:
test-vfde - 隐藏版 - Gebühr pro Benutzer Leistungszeit 07/07/16 bis 08/05/16
但显示的值(我无法上传照片,因为我还没有学分)是以下值:
test-vfde - 隐藏版 - GebÇŸ'?Ç?¶¬hr pro Benutzer Leistungszeit 07/07/16 bis 08/05/16
“ä”或“ü”字符显示正确。我应该如何处理?
【问题讨论】:
-
“显示的值”显示在哪里?
-
你确定作者有错误的字符集,而不是你打开它的读者吗?
-
安德烈亚斯。我仍然无法上传 CSV 文件,但在主题所述的 CSV 文件中。
-
ManuToMatic。我正在调试,UTF8 是用于生成文件的字符集...虽然当客户端使用 Microsoft Excel 或 NotePad++ 时,显示的值不正确...例如,它显示的不是“ü”而是“ÇŸ”
-
使用 UTF-8,我确实在 NotePadd++ 中获得了正确的值。如果你发了minimal reproducible example 会有所帮助。