我试图返回十六进制字符串作为我的AWS Lambda函数的响应。当它到达客户端时,数据似乎被修改了。
-
数据:
47 49 46 38 39 61 01 00 01 00 80 000 000 000 000 000 000
Ff Ff Ff 21 f9 04 01 000 000 01 000 2c 000 000 000 000
3b -
十六进制已转出数据(已发送数据):
开发 x49 x46 x47 x38 x39 x61 x01 x00 x01 x00 x80 x00 x00 x00 x00 x00" xff xff xff x21 xf9 x04 x01 x00 x00 x01 x00 x2c x00 x00 x00 x00" x01 x00 x01 x00 x00 ( x04 x00 x03 x04 x04 x00 x3b
-
接收的数据
47 49 46 38 39 61 01 00 01 00 c2 80 000 000 000 000 000
00 c3 bf c3 bf 21 c3 b9 04 01 00 00 00 01 00
2c 00 00 00 00 00 00 00 00 08 04 00 03 04 04
00 3b如何解决这个问题?
上次我检查的时候在文档中不是很明确,但是API Gateway确实是为json(或类似的)制作的,对二进制的支持是"在路线图上",但显然似乎不是优先考虑的。它将发送的所有内容都转换为utf-8。
将您的原始数据与接收到的数据进行精确比较,您可以看到它:
47 49 46 38 39 61 01 00 01 00 80 00 00 00 00 00 ff ff ff 21 f9 04 01 00 00 01 00 2c 00 00 00 00 01 00 01 00 00 08 04 00 03 04 04 00 3b
47 49 46 38 39 61 01 00 01 00 c2 80 00 00 00 00 00 c3 bf c3 bf c3 bf 21 c3 b9 04 01 00 00 01 00 2c 00 00 00 00 01 00 01 00 00 08 04 00 03 04 04 00 3b
0x7f下的所有内容都是OK的,因为unicode代码点与编码字节(U+0047 -> 47)相同,但对于0x80或更大的问题出现:U+0080 -> c2 80, U+00FF -> c3 bf等等。
我们最近遇到了一个类似的问题:通过网关发送的二进制数据比直接访问我们的后端时更大。这是因为很多字节被Unicode特殊的'替换字符' 'U+FFFD' '又名'0xEF 0xBF 0xBD'取代。
如何修复?我们刚刚停止使用Gateway,但如果你能负担得起更大的数据,你可以使用base64编码。