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

HTML 表單中文參數從二進位還原亂碼問題

     編輯:程式設計綜合問答

現象描述

自製 ServerSocket 接收 HTTP POST 請求,使用 new String(bytes, 0, bytes.length) 解碼,中文變為 %B2%E3%D5... 類似 URL 編碼格式。

原因分析

瀏覽器提交表單時,預設使用 application/x-www-form-urlencoded 編碼,會將非 ASCII 字元轉為 %XX 形式。伺服端收到的是已編碼的位元組流,直接按預設字元集(如 ISO-8859-1 或 UTF-8)轉字串,會得到「雙重編碼」的亂碼。

解決方案

  1. URL 解碼:使用 java.net.URLDecoder.decode(str, "UTF-8")(或對應字元集)將 %XX 還原為原始字元。
  2. 正確解析請求體:先按 ISO-8859-1 轉字串(保證位元組不丟失),再 URLDecoder.decode。
String raw = new String(bytes, "ISO-8859-1");
String decoded = URLDecoder.decode(raw, "UTF-8");

進階建議

  • 直接使用成熟的 Servlet 容器(Tomcat、Jetty)或框架(Spring MVC),自動處理編碼解碼,避免重複造輪子。
  • 若必須自行解析,參考 RFC 3986 實作完整的表單資料解析器,支援 multipart/form-data 等情境。

理解 HTTP 表單編碼機制,是網路程式開發的基礎必修課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved