首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java HttpURLConnection POST 請求中 + 號被轉為空格/換行解決方案

     編輯:程式設計疑難解答

現象

POST 提交 `VIEWSTATE` 等包含 `+` 的字符串,服務端收到變為空格或換行。

原因

`application/x-www-form-urlencoded` 編碼規範:**`+` 代表空格**。若數據本身含 `+` (如 Base64 字符串),**必須 URL 編碼為 `%2B`** 才能保留原意。

解決方案

  1. 發送前對值進行 URL 編碼 (僅編碼值,不編碼鍵名/分隔符):

String encodedValue = URLEncoder.encode(originalValue, "GB2312"); // 或 UTF-8
// 原始 "abc+def" → 編碼後 "abc%2Bdef"
  1. 構建請求體時拼接已編碼的鍵值對:

String postData = "key1=" + URLEncoder.encode(val1, "GB2312") 
                + "&key2=" + URLEncoder.encode(val2, "GB2312");
byte[] postBytes = postData.getBytes("GB2312"); // 與編碼一致
conn.getOutputStream().write(postBytes);

提問者自述

「解決了,需要將 + 轉換成 ASCII 碼後再編碼!也就是將 + 轉成 %2b 就可以了!」

完善建議

  • 使用 `StandardCharsets.UTF_8` 統一編碼,避免 GB2312 兼容性問題。
  • 推薦用 `OkHttp`/`Retrofit` 自動處理編碼、連接池、超時、重試。
  • 若服務端為 ASP.NET (`__VIEWSTATE`),確認 `ViewStateEncoder` 配置一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved