我使用grails通过POST从一些外部资源接收数据。只要发布数据的字符集是UTF-8,我的gails控制器就能正常工作。
不幸的是,我也有外部资源使用字符集8859-1将数据发布到grails控制器,结果是åäö无法正确处理。
在我的情况下,utf-8和8859-1如何使用grails来接收不同字符集的POST数据?
我为每个发送数据的外部源提供不同的控制器和操作。
谢谢Karolina
答案 0 :(得分:0)
也许ISO-8859-1不能对这些字符进行编码,UTF-8中的前256个代码与ISO-8859-1相同(如果可以的话,UTF-8也会成功)
所以问题不在你的最后,你无法解决它。
答案 1 :(得分:0)
你无法仅在服务器端可靠地解决这个问题,因为当你在grails控制器中收到解码字符串时,它们已经被servlet容器解码,假设字节流是默认字符集(utf-8)和CharsetDecoder用?替换无效的字节序列。这意味着您无法从解码的字符串中可靠地获取原始字节,以使用其他字符集(iso-8859-1)重新解码它们。
您可以在http客户端通过在发布时指定内容类型标题中的字符集来解决此问题:
Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1
另一个选择是发布多部分数据,然后grails app的servlet容器不会将字节解码为字符串,你必须使用你想要的任何字符集手动将它们解码为字符串。