从AppEngine TaskQueue服务调用的HTTP POST主体的编码是什么?
如果我通过TaskOptions#payload(byte[], String)
创建任务,那么HTTP请求正文的编码是什么?
同样,通过TaskOptions#param(String, byte[])
创建并通过ServletRequest#getParameter(String)
检索的String
的编码是什么?
更新:我必须在
中使用什么是字符集名称req.getParameter("myParam").getBytes(charset)
获取我通过TaskOptions#param(String, byte[])
提交的二进制数据?
它似乎是一个servlet容器特定的默认值,在http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1的'application / x-www-form-urlencoded'的定义中没有定义 - 因为所有这些都是在servlet中抽象出来的API已经。
答案 0 :(得分:2)
如果我通过创建任务 TaskOptions#payload(byte [],String), 什么将编码HTTP 请求正文?
没有编码 - 传入的字节数组成为HTTP请求的文字体。
同样,编码是什么 通过创建的字符串 TaskOptions#param(String,byte [])和 通过检索 的ServletRequest#的getParameter(字符串)?
使用formencoding对参数进行编码,如常规GET或POST请求。
答案 1 :(得分:1)
在第一个,我不知道。然而,我会对UTF-8
进行赌注,因为Javadoc到处提到UTF-8
。您可以通过HTTP调试器工具(如Fiddler2)调试请求正文。您可以使用UTF-8特定字符来测试字符串,这些字符由string.getBytes("UTF-8")
转换为字节数组,然后在servlet端读取它。如果它返回相同的字符,那么它使用UTF-8的机会肯定很大。
在第二个上,这取决于charset
请求标头中的Content-Type
属性。然而,这通常不存在(至少在使用普通的web浏览器时)。但是,您可以在访问请求正文中的任何数据之前通过ServletRequest#setCharacterEncoding()
自行设置。
if (request.getCharacterEncoding() == null) {
request.setCharacterEncoding("UTF-8");
}
否则将使用平台默认值,由Charset#defaultCharset()
指定。