【发布时间】:2017-12-14 06:32:58
【问题描述】:
我通过这个在线转换器 UTF8 运行了一些输入文本
我将输出放入我的 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 传递给我的调用添加了一些额外的风味。
【问题讨论】:
-
给我们一个合适的例子,我们可以重现这个问题。您提供哪些输入,您在控制器中收到哪些输入等。
-
创建String时需要指定字符集。 从不在服务器应用程序中使用单个参数
new String(byte[]),始终使用您指定字符集作为第二个参数的双参数版本:new String(decoded, StandardCharsets.UTF_8) -
mime 解码器也是个奇怪的选择。你试过
Base64.getDecoder()吗? -
@ErwinBolwidt 已更新。另外,我尝试了 getDecoder 没有任何变化。
-
等一下。您正在通过解码器运行整个 JSON 片段吗?还是只是 base64 字符串?
标签: java spring spring-boot encoding utf-8