表情符号被Akka HTTP客户端弄乱了

问题描述

当我使用Akka http客户端处理响应时,只有某些服务器的响应是乱码。由于外部API,乱码服务器的框架未知。

在乱码的服务器上,使用此代码验证后,utf8String步骤尚未识别出表情符号。

res.dataBytes.runFold(ByteString.empty)(_ ++ _).map(_.utf8String)(as.dispatcher)

例如,有一个API可以响应\uD83C\uDF0F。当它出现乱码时,我可以看到它在Scala应用程序中被解码为字符串\\uD83C\\uDF0F

由于访问另一台使用完全相同的客户端代码来响应相同响应主体的服务器会产生不同的结果,因此我们认为原因在于响应头中。

成功的案例(Node.js上的json服务器)

x-powered-by: Express
vary: Origin,Accept-Encoding
access-control-allow-credentials: true
cache-control: no-cache
pragma: no-cache
expires: -1
x-content-type-options: nosniff
content-type: application/json; charset=utf-8
content-length: 2330
etag: W/"91a-************************"
date: Wed,26 Aug 2020 09:51:43 GMT
connection: keep-alive

失败案例(开发内部API)

date: Wed,26 Aug 2020 09:51:04 GMT
content-type: application/json
content-length: 1457
connection: keep-alive
server: Nginx/1.19.1
trace-id: 333f61556ca43b78
vary: Origin
referrer-policy: origin-when-cross-origin,strict-origin-when-cross-origin
x-frame-options: DENY
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
x-permitted-cross-domain-policies: master-only

由于返回格式化的json和压缩的json之间的差异,因此内容长度的差异无关紧要。

我认为这可能是由于缺少内容类型的字符集。还有其他可能的原因吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)