使用java.net.URLEncoder时不对欧元符号进行编码

时间:2018-12-05 15:31:03

标签: java

例如可以保留欧元符号后的编码。

HttpClient httpClient = getHttpClient();

        // set POST method details
        PostMethod post = new PostMethod(url_p);
  post.setRequestHeader(
            "Content-Type", PostMethod.FORM_URL_ENCODED_CONTENT_TYPE);


String beforeEncoding = "Price is  €100";
String afterEncoding = java.net.URLEncoder.encode(beforeEncoding,UTF-8);
post.setRequestBody(afterEncoding);
httpClient.executeMethod(post);

显示价格+ is +%80100

可能会显示价格+是+€100

2 个答案:

答案 0 :(得分:1)

如果通信使用的是UTF-8(对€符号敏感),则应执行以下操作:

String afterEncoding = java.net.URLEncoder.encode(beforeEncoding, "UTF-8");
String afterEncoding = java.net.URLEncoder.encode(beforeEncoding, StandardCharsets.UTF_8);

不建议使用不带编码的重载encode

请注意,System.out使用平台的编码:System.getProperty("file.encoding")Charset.defaultCharset()


评论后

或者根本不编码,然后设置正文的编码。

PostMethod post = new PostMethod(url);
post.getParams().setContentCharset("UTF-8");

答案 1 :(得分:0)

否,不支持URLEncoder.encode。如果您的例子很简单,则可以坚持简单的String.replace

    String beforeEncoding = "Price is  €100";
    String afterEncoding = beforeEncoding.replace(' ', '+');
    System.out.println(afterEncoding);