java - 执行 UTF-8 Base64 编码/解码 Java 后出现奇怪的字符

标签 java spring spring-boot encoding utf-8

我通过这个在线转换器 UTF8 运行了一些输入文本

https://www.base64encode.org/

我将输出放入 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/

相关文章:

java - 当 WebMvcAutoConfiguration$EnableWebMvcConfiguration 只需要一个 entityManager 时如何在 Spring Boot 中进行 Multi-Tenancy

java - Spring Boot 中的并发

java - 取使 Scanner 停止的定界符

java - 如何将字符串从基数 32 解码为 BigInteger

java - 我们可以使用泛型来只允许特定类型而不是任何类型 <T> 吗?

java - NoClassDefFound错误: com/google/api/gax/grpc/GrpcStatusCode

spring - 如何自定义 BigDecimal 的默认消息

java - spring boot 中的嵌入式 Tomcat 阻塞了一些关键字

java - 为什么启动一个线程会被另一个线程阻塞?

java - Spring Boot 执行器和 Log4j2