Java UTF-8 无法正常处理 JSON

标签 java json spring rest utf-8

我正在使用 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", "");

<子> code piece copied from this post

关于Java UTF-8 无法正常处理 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43109995/

相关文章:

java - 动态改变 Akka Streams 的节流级别

Java 类型删除和数组

json - 更新结构中的特定值

java - 新的 BigDecimal(双)与新的 BigDecimal(字符串)

java - 为什么将此 ArrayList 视为对象列表?

jQuery ajax 请求使用 jsonp 错误

json - 使用 Go 获取 JSON 数组中的特定键

java - hibernate ogm mongo db,如何获取集合计数?

spring - 没有这样的属性 : springSecurityService for class: DUMMY

java - 我们如何在 Java 中进行异步 REST api 调用?