来自java/webservice(json)的字符串中的空格产生不同的字节数组

0h4hbjxa  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(443)

在重构项目中的一些方法之前,我正在为jersey 2-0webservice(json)编写一些验收测试,我偶然发现了一个从webserviceAssert空白字符串的问题。
我从Web服务中获得以下输出:

"Boxes": [
    {
        "id": 1,
        "title": " ", //Yes this is a white-space
        "genre": "genre",
        "info": "some info",
        "rating": "3",
        "artist": "Artist 1"
    }
],

我将Web服务对jsonobject的响应转换为:

public static JSONObject responseToJsonObject(HttpResponse httpResponse) throws IOException {
    String responseString = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
    return new JSONObject(responseString);
}

那么在我的测试中,正常的Assert是这样的:

//* http request creation omitted *//
JSONObject jsonResponse = JsonTranslator.responseToJsonObject(httpRequest)
JSONArray boxes = jsonResponse.getJSONArray("boxes ");
JSONObject result = boxes .getJSONObject(0);

assertEquals(" ", result.getString("title"));

问题是最后一个Assert失败了。

org.junit.ComparisonFailure: 
Expected : 
Actual   : 

我可能知道为什么字节数组会产生两种不同的结果。一个有一个字节 [32] (一个是用java创建的)和一个来自webservice的 [-62,-96] 我以前从未遇到过这个问题。如果我试图在没有 "UTF-8"EntityUtils 方法我得到了更糟糕的结果(   字节数组: [-61,-126,-62,-96] 我可以看到我的网络服务 content-type 标题正确设置为 application/json 有人能解释一下这里发生了什么吗?

brgchamk

brgchamk1#

你得到的角色不是一个“正常”的空间。这是一个不间断的空间。与html中描述的字符相同   .
其unicode值为 '\u00A0' . 它的utf-8表示是 C2 A0 ,这就是您在字节数组中得到的内容。
我相信如果你尝试以下Assert,它会起作用:

assertEquals("\u00A0", result.getString("title"));

相关问题