JMeter通过BeanShell写入CSV文件中的中文乱码

在 JMeter 中通过 BeanShell 写入 CSV 文件时,如果出现中文乱码问题,通常是因为文件编码不匹配。默认情况下,FileWriter 使用的是系统默认编码(可能是 ISO-8859-1 或其他非 UTF-8 编码),而中文字符需要 UTF-8 编码才能正确显示。

以下是解决中文乱码问题的方法:


方法 1:使用 OutputStreamWriter 并指定 UTF-8 编码

将 FileWriter 替换为 OutputStreamWriter,并显式指定编码为 UTF-8。

java 复制代码
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.IOException;

// 定义 CSV 文件路径
String csvFilePath = "C:/path/to/your/output.csv";

// 定义要写入的数据(包含中文)
String dataToWrite = "列1,列2,列3\n值1,值2,值3";

// 使用 OutputStreamWriter 并指定 UTF-8 编码
OutputStreamWriter fileWriter = null;
try {
    fileWriter = new OutputStreamWriter(new FileOutputStream(csvFilePath, true), "UTF-8"); // true 表示追加模式
    fileWriter.write(dataToWrite + "\n");
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (fileWriter != null) {
        try {
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

方法 2:添加 BOM(字节顺序标记)以确保 UTF-8 编码

某些工具(如 Excel)在打开 CSV 文件时,可能需要 BOM 来正确识别 UTF-8 编码。你可以在文件开头写入 BOM。

java 复制代码
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.IOException;

// 定义 CSV 文件路径
String csvFilePath = "C:/path/to/your/output.csv";

// 定义要写入的数据(包含中文)
String dataToWrite = "列1,列2,列3\n值1,值2,值3";

// 使用 OutputStreamWriter 并指定 UTF-8 编码
OutputStreamWriter fileWriter = null;
try {
    fileWriter = new OutputStreamWriter(new FileOutputStream(csvFilePath, true), "UTF-8");

    // 如果是新文件,写入 BOM
    if (new File(csvFilePath).length() == 0) {
        fileWriter.write('\uFEFF'); // UTF-8 BOM
    }

    fileWriter.write(dataToWrite + "\n");
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (fileWriter != null) {
        try {
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

方法 3:使用第三方库(如 OpenCSV)

如果你需要更复杂的 CSV 写入操作,可以使用第三方库(如 OpenCSV)。首先需要将 OpenCSV 的 JAR 文件添加到 JMeter 的 lib 目录中,然后使用以下脚本:

java 复制代码
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;

// 定义 CSV 文件路径
String csvFilePath = "C:/path/to/your/output.csv";

// 定义要写入的数据(包含中文)
String[] header = {"列1", "列2", "列3"};
String[] row = {"值1", "值2", "值3"};

// 使用 OpenCSV 写入 CSV 文件
CSVWriter csvWriter = null;
try {
    csvWriter = new CSVWriter(new OutputStreamWriter(new FileOutputStream(csvFilePath, true), "UTF-8"));

    // 如果是新文件,写入表头
    if (new File(csvFilePath).length() == 0) {
        csvWriter.writeNext(header);
    }

    // 写入数据行
    csvWriter.writeNext(row);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (csvWriter != null) {
        try {
            csvWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

方法 4:确保 JMeter 脚本本身的编码为 UTF-8

如果 BeanShell 脚本中直接包含中文字符,确保 JMeter 的脚本文件保存为 UTF-8 编码:

  1. 打开 JMeter 的 jmeter.properties 文件。

  2. 找到 sampleresult.default.encoding 属性,将其设置为 UTF-8:

    properties 复制代码
    sampleresult.default.encoding=UTF-8
  3. 保存并重启 JMeter。


总结

  • 推荐使用 方法 1 或 方法 2 ,通过 OutputStreamWriter 指定 UTF-8 编码解决中文乱码问题。
  • 如果需要更复杂的 CSV 操作,可以使用 方法 3(OpenCSV)。
  • 确保 JMeter 脚本文件本身保存为 UTF-8 编码(方法 4)。
相关推荐
金銀銅鐵5 小时前
为什么枚举类中可以定义抽象方法
java·后端·ai编程
xiaoye-duck6 小时前
《C++ 项目:手写大模型接入 SDK》Gemini接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
文丑颜不良啊6 小时前
LeetCode1941~1960题目解析
java·leetcode
txxzjmzlh7 小时前
SpringBoot 统⼀功能处理
java·spring boot·后端
nice_lcj5209 小时前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
维克兜率天9 小时前
【维克】复合型CTA:趋势+套利的双轮驱动
python·学习方法
码农小河669 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
浮尘笔记10 小时前
JetBrains差异设置被自动勾选的排查与根治实录
经验分享·程序人生·编辑器·intellij idea·phpstorm·webstorm
SL_staff10 小时前
从配置失效到逻辑复用:JVS-Logic 如何构建可治理的业务编排中枢
java·spring·产品
特立独行的猫A10 小时前
一份 Markdown 发十个平台:cspub 一稿多投
java·后端·python