Tôi nhận được cảnh báo sau khi sử dụng java.net.URLEncoder.encode
:
cảnh báo: [deprecation] mã hóa (java.lang.String) trong java.net.URLEncoder đã không được dùng nữa
Tôi nên sử dụng cái gì thay thế?
Tôi nhận được cảnh báo sau khi sử dụng java.net.URLEncoder.encode
:
cảnh báo: [deprecation] mã hóa (java.lang.String) trong java.net.URLEncoder đã không được dùng nữa
Tôi nên sử dụng cái gì thay thế?
Câu trả lời:
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 để mã hóa; thứ hai là tên của mã hóa ký tự sẽ sử dụng (ví dụ UTF-8
:). Ví dụ:
System.out.println(
URLEncoder.encode(
"urlParameterString",
java.nio.charset.StandardCharsets.UTF_8.toString()
)
);
StandardCharsets.US_ASCII
, StandardCharsets.UTF_8
vv Thật không may, URLEncoder.encode
không chấp nhận một Charset
... (nhưng nhiều moethods khác làm).
URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())
. Sử dụng phương thức UTF_8
của hằng số tĩnh toString()
làm sơ đồ mã hóa ký tự ném java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]
khi toString()
trả về "java.nio.charset.CharsetICU [UTF-8]". Để có được "UTF-8" mong muốn, hãy sử dụng name()
phương thức của nó .
Bạn nên sử dụng:
URLEncoder.encode("NAME", "UTF-8");
Sử dụng lớp URLEncoder :
URLEncoder.encode(String s, String enc)
Ở đâu :
s - Chuỗi được dịch.
enc - Tên của mã hóa ký tự được hỗ trợ .
Bộ ký tự chuẩn:
Mỹ-ASCII Bảy bit ASCII, còn gọi là ISO646-US, còn gọi là khối Latin cơ bản của bộ ký tự Unicode ISO-8859-1 Bảng chữ cái Latinh ISO số 1, còn gọi là ISO-LATIN-1
UTF-8 Định dạng chuyển đổi UCS tám bit
UTF-16BE Định dạng chuyển đổi UCS mười sáu bit, thứ tự byte cuối lớn
UTF-16LE Định dạng chuyển đổi UCS mười sáu bit, thứ tự byte cuối nhỏ
UTF-16 Định dạng chuyển đổi UCS mười sáu bit, thứ tự byte được xác định bởi dấu thứ tự byte tùy chọn
Thí dụ:
import java.net.URLEncoder;
String stringEncoded = URLEncoder.encode(
"This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");
Tham số đầu tiên là Chuỗi để mã hóa; thứ hai là tên của mã hóa ký tự sẽ sử dụng (ví dụ: UTF-8).
Là một tài liệu tham khảo bổ sung cho các phản hồ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 thư viện org.apache.http.protatio, cũng được bao gồm kể từ API Android 1.
org.apache.http.protocol.HTTP
lớp thư viện Apache httpClient 4.x.
Việc sử dụng org.apache.commons.httpclient.URI
không hoàn toàn là một vấn đề; Vấn đề là bạn nhắm mục tiêu vào hàm tạo sai, bị khấu hao.
Chỉ sử dụng
new URI( [string] );
Thực sự sẽ đánh dấu nó như là khấu hao. Điều cần thiết là cung cấp tối thiểu một đối số bổ sung (đầu tiên, bên dưới) và lý tưởng hai:
escaped
: true nếu chuỗi ký tự URI ở dạng thoát. sai khác.charset
: chuỗi ký tự để thực hiện mã hóa thoát, nếu cầnĐiều này sẽ nhắm mục tiêu một nhà xây dựng không khấu hao trong lớp đó. Vì vậy, một cách sử dụng lý tưởng sẽ là như vậy:
new URI( [string], true, StandardCharsets.UTF_8.toString() );
Một chút điên rồ trong trò chơi (một mái tóc hơn 11 năm sau - egad! ), Nhưng tôi hy vọng điều này sẽ giúp người khác, đặc biệt là nếu phương pháp ở phía xa vẫn đang mong đợi một URI, chẳng hạn như org.apache.commons.httpclient.setURI()
.