Java写入GitHub Issues到CSV文件出现格式与编码异常如何解决?
问题解决方法
1. 编码乱码与UTF-8解码错误修复
问题原因
Java原生FileWriter默认使用操作系统默认编码(Windows环境通常为GBK/GB2312)写入文件,非UTF-8编码导致存储字符集不匹配,出现乱码及Python读取时解码报错。
修复方案
替换FileWriter为指定UTF-8编码的字符输出流,示例如下:
// Java 11及以上版本写法 BufferedWriter writer = Files.newBufferedWriter(Paths.get("ISSUE-DOWNLOAD.csv"), StandardCharsets.UTF_8);
如果需要兼容Excel打开CSV不出现乱码,可在写入表头前先写入UTF-8 BOM头:
writer.write('\ufeff');
2. CSV列错位问题修复
问题原因
手动拼接制表符分隔内容时,未处理GitHub Issue正文中自带的制表符、换行符、特殊符号等,导致分隔符识别混乱,列错位;同时原逻辑未处理body为null的场景,会出现行数据缺失。
修复方案
优先使用成熟的CSV处理库(如OpenCSV)生成规范CSV,避免手动拼接的转义遗漏问题。如果不希望引入第三方依赖,可按CSV规范手动处理转义,完整修改后代码如下:
BufferedWriter writer = Files.newBufferedWriter(Paths.get("ISSUE-DOWNLOAD.csv"), StandardCharsets.UTF_8); // 写入BOM头兼容Excel writer.write('\ufeff'); // 写入表头,字段用双引号包裹 writer.append("\"Id\"\t\"Body Text\""); writer.append("\n"); for (GHIssue issue : repository.getIssues(stateOpen)) { // 写入ID字段 writer.append("\"").append(String.valueOf(issue.getNumber())).append("\"\t"); // 处理Body内容 String body = issue.getBody() == null ? "" : issue.getBody(); // 转义内容中的双引号 String escapedBody = body.replace("\"", "\"\""); // 写入转义后的Body writer.append("\"").append(escapedBody).append("\""); writer.append("\n"); } writer.close();
3. Python读取适配
如果读取时仍存在少量编码异常,可在read_csv中添加编码容错参数:
df = pd.read_csv('ISSUE-DOWNLOAD.csv', sep='\t', na_values='n/a', encoding='utf-8', encoding_errors='replace')
内容的提问来源于stack exchange,提问作者nic
相关产品推荐
相关产品推荐

