我正在尝试上载具有特殊字符的文档。 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-8
,UTF-16
和UTF-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);
答案 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不会引发错误。