说我有一个URL
http://example.com/query?q=
Run Code Online (Sandbox Code Playgroud)
我有一个用户输入的查询,例如:
随机字500英镑银行$
我希望结果是一个正确编码的URL:
http://example.com/query?q=random%20word%20%A3500%20bank%20%24
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?我尝试URLEncoder并创建了URI/URL对象,但它们都没有完全正确.
我的Java独立应用程序从用户获取一个URL(指向一个文件),我需要点击它并下载它.我面临的问题是我无法正确编码HTTP URL地址......
例:
URL: http://search.barnesandnoble.com/booksearch/first book.pdf
java.net.URLEncoder.encode(url.toString(), "ISO-8859-1");
Run Code Online (Sandbox Code Playgroud)
回报我:
http%3A%2F%2Fsearch.barnesandnoble.com%2Fbooksearch%2Ffirst+book.pdf
Run Code Online (Sandbox Code Playgroud)
但是,我想要的是
http://search.barnesandnoble.com/booksearch/first%20book.pdf
Run Code Online (Sandbox Code Playgroud)
(空间由%20取代)
我猜URLEncoder不是为了编码HTTP URL而设计的... JavaDoc说"用于HTML表单编码的实用程序类"......有没有其他方法可以做到这一点?
我期待着
System.out.println(java.net.URLEncoder.encode("Hello World", "UTF-8"));
Run Code Online (Sandbox Code Playgroud)
输出:
Hello%20World
(20是空格的ASCII十六进制代码)
但是,我得到的是:
Hello+World
我使用了错误的方法吗?我应该使用的正确方法是什么?
是否可以从 okhttp3 客户端发送 UTF-8 字符?
\n对于以下字符串:
\nString fileName = "3$ M\xc3\xb9 F'RAN\xc3\xa7\xc3\xa9_33902_Country_5_202105";\nString contentDisposition = "attachment;filename=" + "\\"" + fileName + "\\"";\nRun Code Online (Sandbox Code Playgroud)\n我已经尝试过(对于 contentDisposition 标头):
\nHeaders headers = new Headers.Builder()\n .addUnsafeNonAscii("Content-Disposition", contentDisposition)\n .add("Authorization", bearer)\n .add("Content-type", "application/octet-stream")\n .build();\n Request request = new Request.Builder()\n .headers(headers)\n .post(requestBody) \n .url(urlAddress)\n .build();\nRun Code Online (Sandbox Code Playgroud)\n但服务器收到:3$ M\xc3\x83\xc2\xb9 F'RAN\xc3\x83\xc2\xa7\xc3\x83\xc2\xa9_33902_Country_5_202105
该请求发送给一个固定的合作伙伴,因此我无法访问后端。
\napplication/octet-stream是后端需要的。
身体是这样创建的:
\nbyte[] data = FileUtils.readFileToByteArray(file);\nRequestBody requestBody = RequestBody.create(data);\nRun Code Online (Sandbox Code Playgroud)\n它与 Postman 完美配合。
\n完整的 MVCE(无法包含文件和后端信息,但无论如何它之前都会崩溃,所以您可以启动这个确切的代码,它应该会抛出错误):
\n …