拼接 URL 參數時包含空格/中文/特殊字元,拋出 Illegal character in query 或伺服器解析錯誤。
URL 查詢字串僅允許 ASCII 字母數字及 - _ . ~,其他字元必須 Percent-Encoding (URL Encoding)。
String query = URLEncoder.encode(editText.getText().toString(), StandardCharsets.UTF_8.name());
String url = "https://example.com/search?q=" + query;
// 完整範例
String baseUrl = "https://api.example.com/endpoint";
String param1 = URLEncoder.encode(value1, "UTF-8");
String param2 = URLEncoder.encode(value2, "UTF-8");
String url = baseUrl + "?param1=" + param1 + "¶m2=" + param2;
? & = 等結構字元)。StandardCharsets.UTF_8 或 "UTF-8",避免平台預設編碼不一致。+ 或 %20:URLEncoder 依 RFC 3986 將空格編為 +,大多數伺服器支援;若需 %20 可 .replace("+", "%20")。
// Android Uri.Builder (自動編碼)
Uri uri = new Uri.Builder()
.scheme("https")
.authority("api.example.com")
.appendPath("endpoint")
.appendQueryParameter("param1", value1) // 自動編碼
.appendQueryParameter("param2", value2)
.build();
String url = uri.toString();
// OkHttp HttpUrl (推薦)
HttpUrl url = new HttpUrl.Builder()
.scheme("https")
.host("api.example.com")
.addPathSegment("endpoint")
.addQueryParameter("param1", value1)
.addQueryParameter("param2", value2)
.build();
"url?param=" + value 不編碼,極易出錯。URLEncoder.encode(fullUrl) 會破壞結構字元。永遠使用標準庫/框架提供的 URL 建構器(Uri.Builder、HttpUrl、URLEncoder),手動拼接是 Bug 溫床。