AppEngine TaskQueue将byte []数组编码为字符串时使用的编码是什么?

时间:2011-03-09 21:20:35

标签: java google-app-engine servlets character-encoding task-queue

从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已经。

2 个答案:

答案 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()指定。