You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter 5.4.1中波兰字符的ISO-8859-2 URL编码方案求助

JMeter 5.4.1 中波兰字符的 ISO-8859-2 URL 编码解决方案

针对字符串 Urząd 转换为 Urz%B1d 的需求,以下是Groovy和BeanShell两种可行方案:

Groovy 实现

方案1:使用 Apache Commons Codec 的 URLCodec(推荐)

JMeter自带Commons Codec库,可直接调用URLCodec类指定字符集编码:

import org.apache.commons.codec.net.URLCodec

def input = "Urząd"
def codec = new URLCodec("ISO-8859-2")
def encoded = codec.encode(input)
// 将结果存入变量供后续使用
vars.put("encodedString", encoded)

方案2:手动处理字节编码

若不想依赖第三方类,可手动遍历字符字节并转换为URL编码格式:

def input = "Urząd"
def charset = "ISO-8859-2"
def encoded = new StringBuilder()

input.eachByte(charset) { byte b ->
    int unsignedByte = b & 0xFF
    // 保留可打印ASCII字符(排除URL特殊字符),其余转为%XX格式
    if ((unsignedByte >= 0x20 && unsignedByte <= 0x7E) && !['%', '&', '+', ',', '/', ':', ';', '=', '?', '@', '[', '\\', ']', '^', '`', '{', '|', '}', '~'].contains((char)unsignedByte)) {
        encoded.append((char)unsignedByte)
    } else {
        encoded.append(String.format("%%%02X", unsignedByte))
    }
}

vars.put("encodedString", encoded.toString())

BeanShell 实现

方案1:使用 Apache Commons Codec 的 URLCodec

import org.apache.commons.codec.net.URLCodec;

String input = "Urząd";
URLCodec codec = new URLCodec("ISO-8859-2");
String encoded = codec.encode(input);
vars.put("encodedString", encoded);

方案2:手动字节处理

String input = "Urząd";
String charset = "ISO-8859-2";
StringBuilder encoded = new StringBuilder();

try {
    byte[] bytes = input.getBytes(charset);
    for (byte b : bytes) {
        int unsignedByte = b & 0xFF;
        if ((unsignedByte >= 0x20 && unsignedByte <= 0x7E) && !"%&+,/:;=?@[\\]^`{|}~".contains(String.valueOf((char)unsignedByte))) {
            encoded.append((char)unsignedByte);
        } else {
            encoded.append(String.format("%%%02X", unsignedByte));
        }
    }
    vars.put("encodedString", encoded.toString());
} catch (UnsupportedEncodingException e) {
    log.error("编码失败:" + e.getMessage());
}

说明

JMeter 5.5 中直接使用 URLEncoder.encode('Urząd','ISO-8859-2') 可行,是因为其依赖的JDK版本或URLEncoder实现对字符集的处理更稳定。而5.4.1中该方法可能因默认字符集优先级问题,导致编码结果不符合预期,因此推荐使用上述依赖明确字符集的方案。

内容的提问来源于stack exchange,提问作者Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:52:56