2012-02-08 28 views
6

im đang cố gắng gửi yêu cầu đăng lên webservice .. khi tôi thêm ký tự đặc biệt @ vào tham số, nó được chuyển sang% 40.i đã kiểm tra phía máy chủ..they đang nhận% 40 thay thế của @. ai cũng có thể giúp tôi không ?? đây là mã của tôi ..@ được chuyển đổi thành% 40 trong yêu cầu HTTPPost

httpclient = new DefaultHttpClient(); 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
nameValuePairs.add(new BasicNameValuePair("Email", "[email protected]")); 


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

tôi cũng đã thử phương pháp này để ngăn tham số của tôi khỏi mã hóa.

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

nhưng nó giơ thuật toán mã hóa được hỗ trợ

pls giúp tôi ra khỏi đây.

+0

là server-side giải mã mã hóa url đúng cách? – Thilo

+3

Tôi nghĩ rằng đó là cách nó phải làm việc ... kết thúc nhận được nghĩa vụ phải giải mã nó vào biểu tượng '@'. Giải thích thay thế là bạn đang mã hóa nó hai lần, nhưng mã được đăng của bạn sẽ không làm điều đó. – bdares

+0

Tôi có thể gửi tham số mà không cần mã hóa ... ??? hoặc có phương thức nào khác để gửi yêu cầu đăng không? –

Trả lời

6

Bạn đang sử dụng UrlEncodedFormEntity, sẽ URL-encode nội dung. Biến @ thành %40 là bình thường với mã hóa này. Người nhận có thể giải mã tự động, mặc dù bạn có thể phải sử dụng đúng loại nội dung để làm như vậy, có thể là application/x-www-form-urlencoded.

2

Bạn cần sử dụng một cái gì đó như URLDecoder ở phía máy chủ để bạn có thể chuyển đổi %40 quay lại @. Điều tương tự cũng áp dụng cho các ký tự đặc biệt khác.

3

Sử dụng URLDecoder.decode(url) điều này sẽ hữu ích.

1

Bạn có thể sử dụng

URLDecoder.decode("urlcontext", "UTF-8"); 

để loại bỏ bất kỳ ký tự đặc biệt từ url mà bạn đi qua

Các vấn đề liên quan