Java 在servlet中基于输入参数更改编码

Java 在servlet中基于输入参数更改编码,java,servlets,kannel,Java,Servlets,Kannel,我已经将Kannel配置为向我的servlet发送消息。URL如下所示: http://10.10.10.10/income/Submit?from=%p&to=%P&content=%a&encoding=%C 问题是编码是UTF-8用于英文邮件,而UTF-16BE用于波斯邮件。我的servlet类似于: protected void doGet(HttpServletRequest request, HttpServletResponse response) thr

我已经将Kannel配置为向我的servlet发送消息。URL如下所示:

http://10.10.10.10/income/Submit?from=%p&to=%P&content=%a&encoding=%C
问题是
编码
UTF-8
用于英文邮件,而
UTF-16BE
用于波斯邮件。我的servlet类似于:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");

    String to = request.getParameter("to");
    String from = request.getParameter("from");
    String content = request.getParameter("content");

    /* process message here */
}

使用此代码,我无法获取波斯语消息。(它们被转换为
ASCII
)。当我转换
request.setCharacterEncoding(“UTF-8”)
请求.setCharacterEncoding(“UTF-16BE”)
,我得到所有变量的
null
。有谁能帮助我如何根据
编码
字段将
转换为
内容
?我使用Glassfish 3.1.2.2作为容器。

在Kannel中,您可以在
smsbox
组中将
mo recode
设置为1。这将告诉Kannel在发送到HTTP服务之前自动将文本MO消息转换为UTF-8字符集


只要确保您的Kannel是使用iconv支持构建的。

在Kannel中,您可以在
smsbox
组中将
mo recode
设置为1。这将告诉Kannel在发送到HTTP服务之前自动将文本MO消息转换为UTF-8字符集


只要确保您的Kannel是使用iconv支持构建的。

事实上,您必须确保
UTF-8
存在于三个地方!确保他们都在那里。下面是一个很好的解释:在Glassfish上,
request.setCharacterEncoding()
对GET查询字符串完全没有影响。它只影响请求后正文。据我所知,JBoss As>=7是唯一一个允许您通过其
standalone.xml
配置为使用相同的POST请求正文编码来解码GET查询字符串的服务器。但在所有其他系统上,您必须分别显式配置它。因此,在您的问题中,您暗示更改请求后正文编码对GET查询字符串解码有影响,这有点可疑。你真的做了正确的观察吗?事实上,你必须确保
UTF-8
存在于三个地方!确保他们都在那里。下面是一个很好的解释:在Glassfish上,
request.setCharacterEncoding()
对GET查询字符串完全没有影响。它只影响请求后正文。据我所知,JBoss As>=7是唯一一个允许您通过其
standalone.xml
配置为使用相同的POST请求正文编码来解码GET查询字符串的服务器。但在所有其他系统上,您必须分别显式配置它。因此,在您的问题中,您暗示更改请求后正文编码对GET查询字符串解码有影响,这有点可疑。你真的做了正确的观察吗?