URL参数编码/接收问题

时间:2009-10-02 20:54:46

标签: java encoding

我使用以下代码将数据发送到servlet: 当encoding =“UTF-8”或“GBK”时,数据被正确接收。 但是当encoding =“UTF-16”时,接收器接收null。 WHY ??

发件人:

    URL url = new URL(notifyURL);
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=" + encoding);        
    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
    out.write("notify_id=" + URLEncoder.encode("123", encoding) + "&notify_type=" + URLEncoder.encode("any", encoding));
    out.flush();
    out.close();
    connection.connect();

接收器servlet:

            log.info(request.getParameter("notify_type"));    //print null

2 个答案:

答案 0 :(得分:1)

你有2个问题,

  1. 许多网络服务器不支持UTF-16。有些URLDecoder只能处理单字节编码(ASCII,Latin-1)和UTF-8。
  2. 如果您的默认编码不是UTF-16,则使用混合编码。 UTF-8和GBK都是ASCII兼容的(ASCII编码为自身),因此您可以与ASCII混合,但不能使用UTF-16。

答案 1 :(得分:1)

根据URLEncoder的Javadocs,您应该只使用UTF-8,因为其他编码可能会导致问题。它们直接链接到Javadocs的W3C规范。