ListView导出CSV文件时含逗号数据错位问题求助
解决CSV导出含逗号字段错位的问题
按照CSV的标准规范,当字段内容包含逗号、双引号或换行符时,需要用双引号将整个字段包裹起来;如果字段本身包含双引号,要把单个双引号替换成两个双引号(" → ""),这样导出的文件就能被正确识别,不会出现错位,同时保留原有格式。
修改你的代码,新增一个字段处理方法再进行拼接:
// 处理单个CSV字段的工具方法 private String formatCsvField(String field) { if (field == null) { return ""; } // 保留你原有的首尾空格处理逻辑,不需要可删除 String trimmedField = field.trim(); // 判断字段是否需要用双引号包裹 boolean needQuote = trimmedField.contains(",") || trimmedField.contains("\"") || trimmedField.contains("\n") || trimmedField.contains("\r"); if (!needQuote) { return trimmedField; } // 转义字段内的双引号 String escapedField = trimmedField.replace("\"", "\"\""); // 用双引号包裹字段 return "\"" + escapedField + "\""; } // 修改后的导出逻辑 StringBuilder sb = new StringBuilder(); for (String s : array) { sb.append(formatCsvField(s)).append(","); } if (sb.length() > 0) { result = sb.deleteCharAt(sb.length() - 1).toString(); } else { result = ""; }
修改后,包含逗号的字段会被双引号完整包裹(比如Doe, John会变成"Doe, John"),CSV阅读器会将其识别为单个单元格,既不会拆分错位,也不会破坏原有无特殊字符字段的导出格式。
内容的提问来源于stack exchange,提问作者Student Progg
相关产品推荐
相关产品推荐

