【问题标题】:jackson mapper with special character é issue带有特殊字符é问题的杰克逊映射器
【发布时间】:2014-04-22 20:16:25
【问题描述】:

您好,我有一个网页可以提交这样的字符 José Luis Calleja Garcia

但在服务器中它被转换为José Luis Calleja Garcia

我不知道我做错了什么。我应该设置什么配置才能将其设置为José Luis Calleja Garcia

我在角度服务中提交这样的多部分请求

var config = {
    method: "POST",
    url: 'some url',
    headers: { 'Content-Type': false },
    transformRequest: function (data) {
        var formData = new FormData();  
        formData.append("model", angular.toJson(data.getFormDefinition()));
            for (var i = 0; i < data.files.length; i++) {
                formData.append(data.files[i].name, data.files[i]);
            }
            return formData;
        },
    data:requestModel   
};

而我的服务器端对象映射器配置是这样的

public class CustomViewObjectMapper extends ObjectMapper{

    public CustomViewObjectMapper() {
        super();

        this.setAnnotationIntrospector(new JaxbAnnotationIntrospector());
        this.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
        this.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);   
    }
}

提前感谢您的帮助

【问题讨论】:

  • 您使用的是什么编码?你试过uft-8吗?
  • 在哪里?杰克逊文档说,在反序列化它自动检测到的 jason 时
  • 在您的角度请求中使用“Content-type: application/json; charset=utf-8”
  • @user1224036 Jackson 从有效的可能性中检测编码 - 只有 JSON 的有效编码是 UTF-8、UTF-16 和 UTF-32。但是您的 Web 服务器(或客户端)可能会意外使用一些不受支持的编码,例如 ISO-8859-1 (Latin-1);在这种情况下,解析器无能为力——不幸的是,拉丁语 1 不能从 UTF-8 自动检测到。所以在大多数情况下,问题出在使用非 Unicode 编码的生产者身上。

标签: java json angularjs jackson


【解决方案1】:

é 的 Unicode 代码点是 U+00E9,在 UTF-8 中变为 0xC3 0xA9。现在,在 ISO-8859-1 中,0xC3 是 Ã,而 0xA9 是 ©。因此,您似乎是以 UTF-8 发送数据,但将其解释为 ISO-8859-1。

或者,您可以尝试添加内容类型标头:

Content-Type: application/json; charset=utf-8

以确保服务器正确解释它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多