【问题标题】:How properly encode accents for display in REST/JSON response and printStackTrace?如何正确编码重音以在 REST/JSON 响应和 printStackTrace 中显示?
【发布时间】:2017-11-10 19:23:48
【问题描述】:

我在 JSON 响应中返回本地化错误消息并将其打印到日志中。当我这样做时,两者都显示出奇怪的、混乱的角色。如何对消息进行编码以正确显示非英文字符?

存储在"messages_fr.properties"中的消息:

exceptions.generalMessage=Un problème est survenu lors de la gestion de votre demande.

它在 JSON 响应中的显示方式:

"message": "Un problème est survenu lors de la gestion de votre demande."

在堆栈跟踪中显示与上面相同。

【问题讨论】:

  • 您是否尝试过将该字符的实际 UTF-8 表示形式存储在 messages_fr.properties 中?它适用于我的西班牙语消息;比如:Un problema de gestión...存储为Un problema de gesti\u00f3n
  • @ɐuıɥɔɐɯ 如何以 UTF-8 存储它?
  • 结果如下:Un problxC3xA8me est survenu lors de la gestion de votre demande.。我将它存储在 UTF-8 中:Un probl\xC3\xA8me est survenu lors de la gestion de votre demande.
  • 不...你的应该是这样的:Un probl\u00E8me est survenu...;还要确保您确实将该文件存储在 UTF-8 中,Spring 具有该设置(在application.properties 或类似中):spring.messages.encoding = UTF-8...并且(也许)您正在返回响应,正如@Optional 所说,在UTF-8。对我来说,前两个就足够了,因为响应在 Nginx 下游发生了变化。

标签: java json spring spring-boot localization


【解决方案1】:

您如何创建 Json 响应?是球衣服务器吗?

  1. 如果是服务器,则将编码添加到您的@Produces 标记中。

    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")

  2. 如果是 Jackson ObjectMapper,那么默认情况下它应该像这样工作

        Map m = new HashMap();
        m.put("error", "Un problème est survenu lors de la gestion de votre demande.");
        com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(m));
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2011-04-24
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多