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