我正在使用 Spring Rest 模板来获取 Rest API。
当我尝试打印输出时,出现不需要的字符。
这是我的代码:
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> apiResponse = restTemplate.getForEntity(url,String.class);
return apiResponse.getBody();
输出是:
{"status":"FAILURE","error_code":"ITI","message":"Invalid Transaction Id","time":"30-03-2017 11:47:32"}
收到此错误后,我在其余客户端中添加了 UTF-8 字符编码:
public static String exicute(String url) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("utf-8")));
ResponseEntity<String> apiResponse = restTemplate.getForEntity(url,String.class);
return apiResponse.getBody();
}
之后输出发生了变化,但现在?在结果前面。
?{"status":"FAILURE","error_code":"ITI","message":"Invalid Transaction Id","time":"30-03-2017 11:49:34"}
如何解决这个问题?
最佳答案
消息前面的

是因为输入流在流的开头有一个字节顺序标记 (BOM)。字节顺序标记是一个 Unicode 字符,通常位于字节序列的开头,表示后续字节以 UTF-8 编码。
字符本身通常也被编码为 UTF-8。然后它被编码为0xEF,0xBB,0xBF
,通常是displayed as 
.
its only use in UTF-8 is to signal at the start that the text stream is encoded in UTF-8
该字符实际上并不是内容本身的一部分;相反,它只是一段元数据。
如何解决?
在我看来,字节序列的创建者(通常是一个文件,但也可以是网络上的一些字节流)应该删除它。
但另一方面,您可以通过用空字符串替换该字符来轻松删除它。
string.replace("\uFEFF", "");
关于Java UTF-8 无法正常处理 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43109995/