python - format之后乱码

log.info("org_name:"  + org_name)

vars.put('applyDepartmentName', '{}/{}/{}'.format(org_name,group_name,department_name))

为什么format之后applyDepartmentName 乱码了

Kiro:

这个问题的根源在于 JMeter JSR223 + Jython(Python)的字符串编码机制。

log.info 打印 org_name 是正常的,说明变量本身没问题。但 format 之后乱码了,原因是:

vars.get() 返回的是 Java 的 String 对象(UTF-16 编码),Jython 在做 format 拼接时,会尝试把 Java String 当作 Jython 的 byte string 处理,这个过程中中文字节被按 Latin-1 逐字节解释,就产生了你看到的 \u00e4\u00bb\u0093 这种双重编码乱码。

解决方案: 用 u 前缀声明 unicode 字符串模板:

applyDepartmentName = u'{}/{}/{}'.format(org_name, group_name, department_name)
vars.put('applyDepartmentName', applyDepartmentName)
或者更保险的写法,确保每个变量都是 unicode:

org_name = unicode(vars.get("org_name"))
group_name = unicode(vars.get("group_name"))
department_name = unicode(vars.get("department_name"))

applyDepartmentName = u'{}/{}/{}'.format(org_name, group_name, department_name)
vars.put('applyDepartmentName', applyDepartmentName)
核心就一点:Jython 2 里 'xxx' 是 byte string,u'xxx' 才是 unicode string。format 模板用 byte string 的话,拼接 Java String 时会触发隐式编码转换导致乱码。把模板改成 u'{}/{}/{}' 就行了。
posted @ 2026-03-25 17:16  chuangzhou  阅读(19)  评论(0)    收藏  举报