当前位置: 首页 > 知识库问答 >
问题:

MOXy无法使用application/json正确地编排UTF-8字符

黄修永
2023-03-14

我真的被Eclipselink MOXy 2.5.1卡住了,没有给我提供正确编码的亚洲字符(或其他字符,例如:德语umLautsäöü)。

我的代码:

@GET
@Produces({MediaType.APPLICATION_JSON + ";charset=UTF-8"})
@Path("/test")
public Response getJson() throws IOException{
    return Response.ok(new Test()).build();
}

@GET
@Produces({MediaType.APPLICATION_JSON + ";charset=UTF-8"})
@Path("/test2")
public Response getKey() throws IOException{
    return Response.ok(new Test().toString()).build();
}

测试类如下所示:

@XmlRootElement
class Test{

   public String key;

   public Test() throws IOException {
       key = FileUtils.readFileToString(new File("e:\\utf8.txt"), "UTF-8");
   }

   public String toString() {
       return key;
   }
}

属性"key"仅为测试目的初始化一个字符串,我从一个UTF-8编码的文件中读取,该文件没有包含BOM

アナログカメラは

当我通过客户端调用这两种资源时:

    Client client = ClientBuilder.newClient();
    WebTarget webTarget = client.target("http://127.0.0.1/rest").path("/test");
    WebTarget webTarget2 = client.target("http://127.0.0.1/rest").path("/test2");

    Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON_TYPE);
    invocationBuilder.header(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8");
    Response response = invocationBuilder.get();
    System.out.println("Result /test: " + response.readEntity(String.class));

    invocationBuilder = webTarget2.request(MediaType.APPLICATION_JSON_TYPE);
    invocationBuilder.header(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8");
    response = invocationBuilder.get();
    System.out.println("Result /test2: " + response.readEntity(String.class));

我得到以下结果:

Result /test: {"key":"��?��o"}
Result /test2: アナログカメラは

奇怪的是,当我在/test2中编组测试对象的toString()方法时,它将返回正确编码的字符,而使用/test编组测试对象则不会。

任何想法?我有点迷路了。

共有1个答案

洪知
2023-03-14

很抱歉,但我必须解决这个问题。解决方案是使用最新的稳定MOXy库2.5.2。这像魅力一样解决了我的问题(幸运的我)。好吧,就在几分钟前,我问了这个问题,但要确保我在Desparatley寻找解决方案后发布了它,因为过去几天。我得到的唯一暗示是https://bugs.eclipse.org/bugs/show_bug.cgi?id=419072#attach_236300但这只是提到了控制角色的奇怪行为。

希望这能帮助有同样问题的人。

 类似资料:
  • 我正在处理一个位置数据集,其中一些位置名称使用本地字符。大多数字符都被正确地看到,但我对一些罗马尼亚字符有意见,比如“ș”。 我尝试改变我的Windows 10 64位系统区域设置使用UTF-8编码,但这并没有解决问题。 可以在此处找到用于测试的示例文件:https://drive.google.com/file/d/1T7QQQ7G_dA_rXD9Ewf51uuQ6CUkscjP_/view?u

  • 问题内容: 我正在尝试使用DOMDocument解析一些HTML,但是当我这样做时,我突然失去了编码(至少这对我来说是这样)。 这段代码的结果是我得到了一堆不是日语的字符。但是,如果我这样做: 正确显示。我尝试过saveHTML和saveXML,但都无法正确显示。我正在使用PHP 5.3。 我所看到的: 应该显示什么: 编辑:我已经将代码简化为五行,因此您可以自己对其进行测试。 这是返回的html

  • 我正在评估与thymeleaf模板引擎的Spring启动。我正面临UTF8字符表单张贴问题。 对于最简单的post示例: 在控制器中: 在本例中,Spring MVC(或thymeleaf)无法正确编码具有UTF-8字符的表单。 如果我输入,我将看到以下日志: 应编码为。正文应该是,但我不知道为什么它会变成,并被解码成错误的字符。 我在谷歌上搜索并找到了一些解决方案,比如添加一个编码过滤器: 但不

  • 问题内容: 似乎JSON默认编码为UTF-8,Spring MVC 默认返回 ,很难更改。 问题答案: 根据RFC 4627 JSON文本应以Unicode编码。默认编码为UTF-8。 它继续描述了如何检测不同的UTF- *编码,这表明不支持其他编码。 “ SHALL”表示此处的绝对要求(请参阅RFC 2119)。 而且真的是没有理由使用与JSON非UTF编码(如任何可以处理JSON可以 肯定 处

  • 问题内容: 我使用MySQL 5.1,并从一个270万行的UTF-8解码txt文件加载到一个表中,该表本身声明为,并且所有char字段都声明为,使用… 在数据库本身中,所有字符似乎都是正确的,一切看起来都不错。但是,当我使用php打印它们时,字符显示为???,尽管我在HTML头中使用utf-8声明: 在另一个表(使用utf-8)中,我从提交的表单中插入了文本,这些字符在数据库中奇怪地显示,但是当我

  • 嗨,有人能帮我处理这个错误吗?当我使用邮递员发送邮件请求时,这里是我的控制器 这就是我使用postman发送json的方式 我正在尝试搜索如何修复它,但错误仍然存在 编辑:这是邮递员的标题 提前致谢