我通过这个在线转换器 UTF8 运行了一些输入文本
我将输出放入 API 中,API 对其进行解码并进行进一步处理。
API调用
@RequestMapping(value = "/highlight", method = RequestMethod.POST)
@ResponseBody
public String highlightTester(@RequestBody String programInput) throws UnsupportedEncodingException {
byte[] decoded = Base64.getMimeDecoder().decode(programInput);
String result = new String(decoded, StandardCharsets.UTF_8);
当我记录这些信息时,我不断收到一个奇怪的字符..
输入
{
"code": "ICAgICAgICAvLyBTaW1wbGUgdXNlIFB5Z21lbnRzIGFzIHlvdSB3b3VsZCBpbiBQeXRob24NCiAgICAgICAgaW50ZXJwcmV0ZXIuZXhlYygiZnJvbSBweWdtZW50cyBpbXBvcnQgaGlnaGxpZ2h0XG4iDQogICAgICAgICAgICAgICAgKyAiZnJvbSBweWdtZW50cy5sZXhlcnMgaW1wb3J0IFB5dGhvbkxleGVyXG4iDQogICAgICAgICAgICAgICAgKyAiZnJvbSBweWdtZW50cy5mb3JtYXR0ZXJzIGltcG9ydCBIdG1sRm9ybWF0dGVyXG4iDQogICAgICAgICAgICAgICAgKyAiZm9ybWF0dGVyID0gSHRtbEZvcm1hdHRlcihzdHlsZT0nbW9ub2thaScsIg0KICAgICAgICAgICAgICAgICsgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm9zPUZhbHNlLCINCiAgICAgICAgICAgICAgICArICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9jbGFzc2VzPVRydWUsIg0KICAgICAgICAgICAgICAgICsgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NjbGFzcz0nJywiDQogICAgICAgICAgICAgICAgKyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXN0eWxlcz0nbWFyZ2luOiAwJykiDQogICAgICAgICAgICAgICAgKyAiXG5yZXN1bHQgPSBoaWdobGlnaHQoY29kZSwgUHl0aG9uTGV4ZXIoKSwgZm9ybWF0dGVyKSIpOw0KDQogICAgICAgIC8vIEdldCB0aGUgcmVzdWx0IHRoYXQgaGFzIGJlZW4gc2V0IGluIGEgdmFyaWFibGUNCiAgICAgICAgbG9nLmluZm8oaW50ZXJwcmV0ZXIuZ2V0KCJyZXN1bHQiLCBTdHJpbmcuY2xhc3MpKTsNCiAgICAgICAgcmV0dXJuIGludGVycHJldGVyLmdldCgicmVzdWx0IiwgU3RyaW5nLmNsYXNzKTs="
}
奇怪的输出
....#1e0010">�</span><span style="color: #f92672">^</span>....
现在,即使我使用不同的编码器,实际上我传入的每种类型的输入都会发生这种情况。为什么会发生这种情况?
更多输出
r�^wefwefwef
我正在使用 Java Spring Boot 来运行我的 API,因此想知道通过 Postman 传递它是否会为我的调用添加一些额外的 flavor 。
最佳答案
您将整个请求正文传递给 Base64 解码器。由于请求正文不仅包含 Base64 编码的字符串,还包含 JSON 标记,因此解码将失败或导致意外的输出。
要修复,请执行以下任一操作:
- 确保请求正文中仅包含 Base64 内容;或
- 解析请求正文中的 JSON 并提取要解码的 Base64 字符串;或
- 创建一个与您的 JSON 结构相对应的 bean,并让 Spring 自动将请求正文映射到该 bean。
关于java - 执行 UTF-8 Base64 编码/解码 Java 后出现奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47807201/