0

从 AppEngine TaskQueue 服务调用的 HTTP POST 正文的编码是什么?

如果我通过 创建任务TaskOptions#payload(byte[], String),HTTP 请求正文的编码是什么?

同样,String创建的 viaTaskOptions#param(String, byte[])和检索的 via的编码是ServletRequest#getParameter(String)什么?

更新:我必须使用的字符集名称是什么

req.getParameter("myParam").getBytes(charset)

取回我通过提交的二进制数据TaskOptions#param(String, byte[])

它似乎是一个 servlet-container 特定的默认值,在http://www.w3.org/TR/html4/interact/forms.html的“application/x-www-form-urlencoded”的定义中没有定义#h-17.13.4.1——因为所有这些都已经在 servlet API 中抽象出来了。

4

2 回答 2

2

如果我通过 TaskOptions#payload(byte[], String) 创建任务,HTTP 请求正文的编码是什么?

没有编码 - 您传入的字节数组成为 HTTP 请求的文字正文。

同样,通过 TaskOptions#param(String, byte[]) 创建并通过 ServletRequest#getParameter(String) 检索的字符串的编码是什么?

参数使用formencoding 进行编码,就像在常规的GET 或POST 请求中一样。

于 2011-03-10T17:38:29.860 回答
1

关于第一个,我不知道。但是,我会打赌,UTF-8因为 JavadocUTF-8到处都提到了。您可以通过 Fiddler2 等 HTTP 调试器工具调试请求正文。您可以使用带有 UTF-8 特定字符的字符串进行测试,这些字符被转换为字节数组string.getBytes("UTF-8"),然后在 servlet 端读取它。如果它返回相同的字符,那么它使用 UTF-8 的机会肯定很大。

第二个,这取决于请求标头charset中的属性。Content-Type然而,这通常不存在(至少,当使用普通的网络浏览器时)。但是,您可以在访问请求正文中的任何数据之前自行设置。ServletRequest#setCharacterEncoding()

if (request.getCharacterEncoding() == null) {
    request.setCharacterEncoding("UTF-8");
}

否则,将使用平台默认值,如Charset#defaultCharset().

于 2011-03-10T02:03:47.307 回答