2009-05-22 46 views
16

Tôi muốn sử dụng lớp URLEncoder/URLDecoder (java.net.URLEncoder/URLDecoder) trong một ứng dụng và các phương thức: mã hóa (String s, String enc)/decode (Chuỗi s, String enc), nhưng tôi không biết giá trị của đối số String có thể là gì? Tôi muốn mã hóa/giải mã trong loại nội dung "M-www-form-urlencoded" MIME. Cảm ơn sự giúp đỡ của bạn.URLEncoder encode/URLDecoder giải mã trong java (Android)

Trả lời

17

Tham số mã hóa là mã hóa ký tự bạn đang sử dụng. For example "UTF-8".

+0

Vì vậy, tôi phải viết như sau: mã hóa ("hello", "x-www-form-urlencoded") hoặc cho "x-www-form-urlencoded", nó mã hóa ("hello", "UTF-8 ")? –

+0

Bạn phải viết mã hóa ("hello", "UTF-8"). x-www-form-urlencoded luôn là loại kết quả. Tham số mã hóa đề cập đến dữ liệu đầu vào của bạn. – jgre

+0

Cảm ơn bạn đã trả lời! –

1

Các JavaDoc có tất cả các chi tiết

+0

JavaDoc không đề cập đến tất cả các định dạng mã hóa có thể có hoặc tôi cũng không thấy liên kết với ENUM có thể liệt kê chúng. – anon58192932

4

Trước tiên, bạn cần phải thiết lập các nội dung kiểu như một 'x-www-form-urlencoded'. Sau đó, bất kỳ nội dung nào bạn muốn mã hóa, mã hóa nó bằng cách sử dụng "UTF-8".

Ví dụ:

Đối với thiết lập nội dung cho 'x-www-form-urlencoded':

URL url = new URL("http://www.xyz.com/SomeContext/SomeAction"); <br> 
URLConnection urlConnection = url.openConnection();<br> 
....<br> 
....<br> 
urlConnection.setRequestProperty("Content-type","application/x-www-form-urlencoded"); 


Hoặc nếu bạn đang sử dụng một số JSP sau đó bạn có thể viết như sau trên trên đỉnh của nó.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><br> 
< META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 


< FORM action="someaction.jsp" enctype="application/x-www-form-urlencoded" name="InputForm" method="POST"> 

Và để sử dụng URLEncoder:

String encodedString = URLEncoder.encode("hello","UTF-8"); 
+0

Tôi đã thực hiện: - HttpPost post = new HttpPost ("url"); - post.setHeader ("Content-Type", "application/x-www-form- urlencoded"); - Chuỗi mã hóaString = URLEncoder.mã hóa ("hello", "UTF-8"); - StringEntity temp; - temp.setContentEncoding (encodedString); - post.setEntity (temp); và sau đó thực hiện một DefaultHttpClient với bài viết cho đối số. –

+0

Cảm ơn bạn đã trả lời! –

+0

Hy vọng nó hoạt động ngay bây giờ! – Sourabh

0

URLEncoderURLDecoder cả hai đều là ngoại lệ Throwable và do đó phải được ít nhất bao bọc bởi khối try/catch. Tuy nhiên có một chút đơn giản hơn cách sử dụng litle android.net.Uri:

Uri.decode(string); 
Uri.encode(string); 

Đó là phương pháp tĩnh, sử dụng utf-8, có sẵn từ API-1 và ném không phải ngoại lệ.

0

yêu thích cá nhân của tôi:

static String baseNameFromURL(URL url) { 
    String shortName; 
    String path = url.getPath(); 
    String escaped = path.substring(path.lastIndexOf('/') + 1); 
    try { 
     shortName = URLDecoder.decode(escaped, "UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     throw new Error(e.getMessage(), e); 
    } 
    int period = shortName.lastIndexOf('.'); 
    return period > -1 ? shortName.substring(0, period) : shortName; 
} 

Trả về một chuỗi rỗng nếu URL không có một phần tên tập tin, như https://stackoverflow.com/ hoặc https://stackoverflow.com/questions/. Nếu có dấu gạch chéo ngược trong phần tên tệp, nó được bảo toàn.

Bạn có thể loại bỏ hai dòng cuối cùng nếu bạn cần tên ngắn bằng tiện ích thay thế.

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