Tôi đang gặp rắc rối mã hóa URL đến một URI:URL để mã hóa URI thay đổi một "% 3D" vào "% 253D"
mUrl = "A string url that needs to be encoded for use in a new HttpGet()";
URL url = new URL(mUrl);
URI uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(),
url.getQuery(), null);
này không làm những gì tôi mong đợi cho các URL sau:
Đi qua trong String:
http://m.bloomingdales.com/img?url=http%3A%2F%2Fimages.bloomingdales.com%2Fis%2Fimage%2FBLM%2Fproducts%2F3%2Foptimized%2F1140443_fpx.tif%3Fwid%3D52%26qlt%3D90%2C0%26layer%3Dcomp%26op_sharpen%3D0%26resMode%3Dsharp2%26op_usm%3D0.7%2C1.0%2C0.5%2C0%26fmt%3Djpeg&ttl=30d
Comes ra như:
http://m.bloomingdales.com/img?url=http%253A%252F%252Fimages.bloomingdales.com%252Fis%252Fimage%252FBLM%252Fproducts%252F3%252Foptimized%252F1140443_fpx.tif%253Fwid%253D52%2526qlt%253D90%252C0%2526layer%253Dcomp%2526op_sharpen%253D0%2526resMode%253Dsharp2%2526op_usm%253D0.7%252C1.0%252C0.5%252C0%2526fmt%253Djpeg&ttl=30d
Đó là bị hỏng. Ví dụ: %3D
được chuyển thành %253D
Có vẻ như bạn đang làm điều gì đó bí ẩn với% đã có trong chuỗi.
Điều gì đang xảy ra và tôi đang làm gì sai ở đây?
Điều đó có ý nghĩa, cảm ơn bạn đã viết. Các url đang được lấy từ mã html, vì vậy tôi cho rằng chúng sẽ phải được mã hóa rồi? Một trong những lý do tôi đã sử dụng URL và hàm tạo đa đối số là vì tôi cần loại bỏ đoạn (nếu có) khỏi URI. Có cách nào tôi có thể làm điều này mà không cần mã hóa đôi? Sẽ có một cái gì đó như String urlMinusFragment = url.getProtocol() + ": //" + url.getAuthority() + url.getPath() + "?" + url.getQuery(); Hãy an toàn để làm gì? Sau đó, tôi có thể ném chuỗi đó vào hàm tạo URI (chuỗi) mới. Cảm ơn một lần nữa. – cottonBallPaws
Nếu bạn tách URL ra khỏi thuộc tính 'href' trong HTML, thì chúng phải luôn được mã hóa đúng (nếu không, thì HTML không hợp lệ, vì vậy bạn có thể coi đó là lỗi). Kỹ thuật loại bỏ đoạn có vẻ OK nhưng bạn đang xây dựng một URL theo cách thủ công (có thư viện). Tôi sẽ sử dụng lớp URI. Giống như URL, URI có các thành phần getters, nhưng chúng trả về các chuỗi * được giải mã * mà an toàn để đưa trở lại vào URI. Vì vậy, URI (uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), uri.getPath(), uri.getQuery(), null) 'nên hoạt động. – mgiuca
rực rỡ, hoạt động hoàn hảo. Cảm ơn – cottonBallPaws