我们是否可以在API 中使用application/x-www-form-urlencoded
内容类型的POST请求中指定参数的字符编码(例如RESTful Web服务),如果“是的”,怎么样?
参数将根据此处指定的算法进行编码:URL-encoded form data
在字符串可以进行百分比编码(对字节进行操作)之前,需要将它们表示为具有特定字符编码的代码单元流。
对于 Forms ,此字符编码可以由服务器发送的Form属性确定,例如通过表单数据集中的隐藏_charset_
条目或{{1} }属性。
但是,由于 API请求没有相应的表单,因此我们无法推断出服务器接受/需要的字符编码。
看来,唯一合理的编码是UTF-8。如果无法从表单中确定此类字符编码,则这是默认编码。
(Related question)(但没有重复)
答案 0 :(得分:1)
使用以下解决方案之一:
添加自定义请求标题
答案 1 :(得分:0)
不幸的是,浏览器在发送数据时仍然非常愚蠢。这是JavaEE 5相关的问题,现在仍然存在 - 您可以检查浏览器的表单提交数据,并且您将看到它不包含任何字符集编码信息!
阅读https://docs.oracle.com/cd/E19316-01/819-3669/bnayd/index.html。
因此,在大多数情况下,解码表单数据的服务器部分必须神奇地知道编码。简单的解决方案是指定accept-charset = iso-8859-1,如果不需要UTF-8。否则指定accept-charset = utf-8并确保解码表单数据的服务器部分默认为utf-8 .....我想知道将charset编码参数添加到浏览器有多困难请求并强制指定它 - ffs。这可能是我见过的最蠢的事情。
另见HttpServletRequest - setCharacterEncoding seems to do nothing