字符串含Unicode转义字符调用第三方API返回500错误如何处理?
Unicode转义字符转换解决方案
你遇到的报错本质是字符串内的\uXXXX格式Unicode转义序列未被解码,直接作为字面量传输导致服务端解析失败,示例中的\u003d对应的实际字符就是=。
各主流开发语言实现方式
Python
使用内置编解码规则即可实现:
# raw_str为你获取到的原始带转义的字符串 raw_str = "Ac6jHguQjKKUxx6MSOpjO2kOLKPAdjStVs1pgTGNSU8\\u003d" decoded_str = raw_str.encode('utf-8').decode('unicode_escape')
解码后得到的字符串末尾会是=,和你在Postman手动替换后的结果一致。
Java
推荐使用Apache Commons Lang工具类,无需手动处理正则匹配:
import org.apache.commons.lang3.StringEscapeUtils; String rawStr = "Ac6jHguQjKKUxx6MSOpjO2kOLKPAdjStVs1pgTGNSU8\\u003d"; String decodedStr = StringEscapeUtils.unescapeJava(rawStr);
如果不希望引入第三方依赖,也可以自行实现正则匹配,批量把\u开头的4位16进制数转换为对应字符。
JavaScript/Node.js
借助JSON的内置解析能力实现:
const rawStr = "Ac6jHguQjKKUxx6MSOpjO2kOLKPAdjStVs1pgTGNSU8\\u003d"; // 注意需要给原始字符串包裹双引号再传入JSON.parse const decodedStr = JSON.parse(`"${rawStr}"`);
Go
使用标准库的strconv包处理:
import "strconv" rawStr := `Ac6jHguQjKKUxx6MSOpjO2kOLKPAdjStVs1pgTGNSU8\u003d` quotedStr := `"` + rawStr + `"` decodedStr, err := strconv.Unquote(quotedStr) if err != nil { // 处理非法转义序列异常 }
验证规则
解码完成后直接打印字符串,确认转义序列已经被替换为对应实际字符后再发起接口请求即可。
内容的提问来源于stack exchange,提问作者Anton Pankratov
相关产品推荐
相关产品推荐

