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'{}/{}/{}' 就行了。
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/19771266

浙公网安备 33010602011771号