无法通过Java SDK在AWS CloudSearch中上载具有特殊字符的文档

时间:2019-07-25 07:27:53

标签: amazon-cloudsearch

我正在尝试上载具有特殊字符的文档。 JSON字符串是

[{
  "type": "add",
  "id": 1234,
  "fields": {
    "copyrightline": "© 2005 Some company.  All Rights Reserved."
  }
}]

当我从json中删除“©”时,我可以上传文档。当我使用字符“©”时,以下是错误

  

AmazonCloudSearchDomainException:我们计算出的请求签名   与您提供的签名不匹配。检查您的AWS Secret   访问密钥和签名方法。请查阅服务文档以获取   细节。 (服务:AmazonCloudSearchDomain;状态码:403;错误   代码:SignatureDoesNotMatch;要求编号:   d11a2497-aeac-11e9-b6fb-db6602f3004a)

试图更改编码(UTF-8UTF-16UTF-32),但没有成功。

这是将上面的字符串推送到CloudSearch

的代码
UploadDocumentsRequest uploadDocumentsRequest = new UploadDocumentsRequest();
InputStream inputStream = org.apache.commons.io.IOUtils.toInputStream(testDataString, "UTF-8");
uploadDocumentsRequest.setDocuments(inputStream);
uploadDocumentsRequest.setContentType(ContentType.Applicationjson);
uploadDocumentsRequest.setContentLength((long) testData.length());
UploadDocumentsResult uploadDocumentsResult = client.uploadDocuments(uploadDocumentsRequest);

1 个答案:

答案 0 :(得分:0)

是编码错误。按照以下说明解决了该问题(将编码更改为“ ISO-8859-1”)。

Read special characters in java with BufferedReader

编辑: 问题是杰克逊对象映射器将对象转换为UTF-8中的字符串。但是对象包含UTF-8不支持的特殊字符。下面也一样 ISO-8859-1 encoded strings out of /into JSON in Java 并将字符串更改回“ ISO-8859-1”,AWS不会引发错误。