Java ME (CLDC) 環境缺少 java.net.URLEncoder,本類別移植自 Java SE 版本,經多款手機實測可正常完成 application/x-www-form-urlencoded 編碼。
String encoded = URLEncoder.encode("中文參數"); // 直接呼叫靜態方法
String postData = "para=" + encoded;
outputStream.write(postData.getBytes());
// 伺服器端 (Servlet) 直接 request.getParameter("para") 即得原始字串
a-z A-Z 0-9、特殊字元 .-*_ 保持不變。+。%XY 表示 (兩位十六進位)。package com.J2MEdev.httpme.tools;
import java.io.*;
public class URLEncoder {
private static boolean[] dontNeedEncoding = new boolean[256];
private static String defaultEncName;
static {
for (int i='a'; i<='z'; i++) dontNeedEncoding[i]=true;
for (int i='A'; i<='Z'; i++) dontNeedEncoding[i]=true;
for (int i='0'; i<='9'; i++) dontNeedEncoding[i]=true;
dontNeedEncoding[' ']=true; dontNeedEncoding['-']=true;
dontNeedEncoding['_']=true; dontNeedEncoding['.']=true; dontNeedEncoding['*']=true;
defaultEncName = System.getProperty("microedition.encoding");
if (defaultEncName==null || defaultEncName.trim().length()==0) defaultEncName="UTF-8";
}
public static String encode(String s) { return encode(s, defaultEncName); }
public static String encode(String s, String enc) {
// ... 完整編碼邏輯:StringBuffer 輸出、OutputStreamWriter 轉碼、
// 處理 Unicode 替補字元、位元組轉 %XY、大寫十六進位字母
// (原始碼略,關鍵在於正確處理多位元組字元與編碼例外)
}
// 輔助方法:forDigit, isLetter 等
}
Character 完整 API,十六進位轉換自行實作 forDigit()。encode(str, "UTF-8") 保證跨平台一致性。