@在HTTPPost请求中转换为%40

时间:2012-02-08 12:11:34

标签: java android http https http-headers

我试图将帖子请求发送到webservice .. 当我在参数中添加特殊字符@时,它被转换为%40.i已检查服务器端..他们正在获得%40而不是@。 谁能帮我?? 这是我的代码..

httpclient = new DefaultHttpClient();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("Email", "abc@gmail.com"));


httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
 ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = httpclient.execute(httppost,responseHandler);

我也尝试过这种方法来阻止我的参数编码。

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.PLAIN_TEXT_TYPE));

但它引发了不受支持的编码算法

请帮我解决这个问题。

5 个答案:

答案 0 :(得分:6)

您正在使用UrlEncodedFormEntity,这将URL-encode内容。使用此编码将@转换为%40是正常的。收件人应该能够自动解码,尽管您可能必须使用正确的内容类型,可能application/x-www-form-urlencoded

答案 1 :(得分:2)

您需要在服务器端使用URLDecoder之类的内容,以便将%40转换回@。这同样适用于其他特殊字符。

答案 2 :(得分:2)

使用URLDecoder.decode(url)这会有所帮助。

答案 3 :(得分:1)

您可以使用

package com.xx4everPixelatedxx.gaterunner.sprites;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector3;
import com.xx4everPixelatedxx.gaterunner.GateRunner;

import javax.xml.soap.Text;

/**
 * Created by Michael Jan on 8/17/2015.
 */
public class GameIcon extends Sprite {
    private int vX = 3;
    private int vY = 3;
    private int r = 9;
    private int rotation;

    private Vector3 position;

    private Texture texture;

    public GameIcon(int x, int y) {
        position = new Vector3(x, y, 0);
        texture = new Texture(Gdx.files.internal("icon_players/icon1.png"));
        setTexture(texture);
    }

    public void update() {
        position.add(vX, vY, 0);
        rotation = rotation + r;

        rotation = rotation % 360;

        setRotation(rotation);
        setOriginCenter();
    }

    public void addPosition(int x, int y) {
        position.add(x, y, 0);
        setOriginCenter();
    }

    public void negateVelocityX() {
        vX = -vX;
    }

    public void negateRotation() {
        r = -r;
    }

    public Vector3 getPosition() {
        return position;
    }

    public int getvY() {
        return vY;
    }

    public void setvY(int vY) {
        this.vY = vY;
    }

    public int getvX() {
        return vX;
    }

    public void setvX(int vX) {
        this.vX = vX;
    }
}

从您传递的网址中删除任何特殊字符

答案 4 :(得分:0)

我参加这个聚会肯定很晚,但是我遇到了类似的问题。如果要解码url字符串,则需要使用encodeURIComponent( url )。其中 url 是您要解码的字符串。

W3schools在解释它方面做得很好。 https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_decodeuricomponent