2008-10-17 20 views
155

tôi nhận được cảnh báo sau khi sử dụng java.net.URLEncoder.encode:java.net.URLEncoder.encode (Chuỗi) không được dùng nữa, tôi nên sử dụng cái nào?

warning: [deprecation] encode(java.lang.String) 
     in java.net.URLEncoder has been deprecated

Những gì tôi nên sử dụng để thay thế?

+23

này được trả lời trong thẻ deprecation trong tài liệu: "Thay vào đó, sử dụng mã hóa (String, String) phương pháp để xác định mã hóa" Xem http://java.sun.com/javase/6/docs/api/java/net/URLEncoder.html. –

Trả lời

228

Sử dụng encode phương pháp khác trong URLEncoder:

URLEncoder.encode(String, String) 

Tham số đầu tiên là văn bản cần mã hóa; thứ hai là tên của mã hóa ký tự để sử dụng (ví dụ: UTF-8). Ví dụ:

System.out.println(
    URLEncoder.encode(
    "urlParameterString", 
    java.nio.charset.StandardCharsets.UTF_8.toString() 
) 
); 
+12

@jsh: Tôi bối rối, tại sao không nên có URLDecoder? Tại sao điều này làm cho Java cồng kềnh? Đây là những phương pháp tĩnh. Nó sẽ mất cùng một lượng nỗ lực để nhập một trong hai. Nếu bạn thích Python, tại sao bạn lập trình bằng Java? Có phải vì nhiều người sử dụng Java hơn Python và bạn có một công việc Java thay vì công việc Python? – stepanian

+2

@stepanian yep, bạn phải làm việc ở nơi làm việc. gói python tôi thường sử dụng đặt tất cả các tiện ích mã hóa và giải mã dưới một mái nhà. Tôi chủ yếu thêm nhận xét này bởi vì tôi phải đi và tìm URLDecoder và tôi nghĩ rằng nó có thể tiết kiệm cho ai đó một vài phút để biết điều này là những gì đã được yêu cầu. – jsh

+0

@jsh: Rất nhiều người thích Python. Tôi chưa bao giờ sử dụng nó, nhưng tôi chắc chắn tôi cũng muốn nó nếu tôi có thời gian để thử nó. Nhưng tôi cũng đang đuổi theo đồng đô la. Java không phải là xấu. – stepanian

20

Bạn nên sử dụng:

URLEncoder.encode("NAME", "UTF-8"); 
1

Tham số đầu tiên là String để mã hóa; thứ hai là tên của mã hóa ký tự để sử dụng (ví dụ: UTF-8).

1

Là một tài liệu tham khảo bổ sung cho các câu trả lời khác, thay vì sử dụng "UTF-8" bạn có thể sử dụng:

HTTP.UTF_8

được bao gồm từ Java 4 như một phần của org.apache. http.protocol thư viện, được bao gồm cũng kể từ Android API 1.

+0

** Sai **, lớp này được tìm thấy trong thư viện Apache HttpClient 4.x của lớp org org.apache.http.protocol.HTTP'. –

+0

@ BuhakeSindi đúng, tôi đọc API 1 nhưng nó đã được Android không Java, hoặc là cách nó tồn tại trước khi Java 7, nó thậm chí còn không được chấp nhận đã haha. – htafoya

+0

không, lớp này ** không bao giờ tồn tại trong bất kỳ phiên bản Java JDK nào. Android theo sau thư viện Apache HttpClient (tôi cũng sẽ không ngạc nhiên nếu họ lấy mã nguồn từ đó). Cảnh báo –

18

Sử dụng các lớp URLEncoder:

URLEncoder.encode(String s, String enc) 

đâu:

s - String để được dịch.

enc - Tên của số được hỗ trợ character encoding.

bảng mã tiêu chuẩn:

US-ASCII Bảy-bit ASCII, aka ISO646-Mỹ, hay còn gọi là khối cơ bản Latin của ký tự Unicode thiết ISO-8859-1 ISO Latin Bảng chữ cái số 1, akaISO-LATIN-1

UTF-8 Tám-bit chuyển đổi UCS Format

UTF-16BE Sixteen-bit chuyển đổi UCS Format, lớn-endian thứ tự byte

UTF-16LE Định dạng chuyển đổi UCS 16 bit, thứ tự byte nhỏ cuối

UTF-16 Định dạng chuyển đổi UCS mười sáu bit, thứ tự byte được xác định bởi một o ptional byte-trật tự dấu

Ví dụ:

import java.net.URLEncoder; 

String stringEncoded = URLEncoder.encode(
    "This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8"); 
Các vấn đề liên quan