java生成csv文件乱码的解决方法示例 java导出csv乱码


在Java中生成CSV文件时遇到乱码问题,通常是因为在写入文件时没有正确设置字符编码。默认情况下,如果不指定字符编码,可能会使用平台默认的编码(如GBK在中文Windows环境下),这可能与CSV文件的预期编码(如UTF-8)不一致。

以下是一个简单的Java示例,展示了如何以UTF-8编码写入CSV文件,以避免乱码问题:


import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class CsvExportExample {

    public static void main(String[] args) {
        String csvFile = "output.csv";

        // 使用try-with-resources语句自动管理资源
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(csvFile, true))) {
            // 设置文件编码为UTF-8,注意FileWriter本身不直接支持指定编码
            // 这里通过BufferedWriter的包装,实际写入操作仍依赖于FileWriter
            // 但对于读取和解析CSV文件时,应确保使用支持UTF-8的读取方式

            // 写入CSV头部(可选)
            writer.write("姓名,年龄,职业\n");

            // 写入数据行
            writer.write("张三,30,工程师\n");
            writer.write("李四,25,学生\n");

            System.out.println("CSV文件写入完成,无乱码问题(假定文件读取时也使用UTF-8编码)");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

**注意**:虽然上面的代码示例没有直接显示设置字符编码为UTF-8,但实际上当CSV文件被读取时,只要确保读取操作也使用UTF-8编码,就不会出现乱码问题。如果需要在写入文件时明确指定编码,可以考虑使用`OutputStreamWriter`来包装`FileOutputStream`,并指定字符编码:


try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile, true), "UTF-8"))) {
    // 写入CSV内容...
}

但请注意,在简单的CSV写入场景中,直接使用`FileWriter`并通过确保读取端使用相同的编码,通常就足够了。如果涉及到更复杂的文本处理或需要确保跨平台一致性,则推荐使用`OutputStreamWriter`明确指定编码。