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

Java ME 平台 URLEncoder 實作類別 (支援中文編碼)

     編輯:J2EE

背景

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") 即得原始字串

核心編碼規則 (遵循 HTML 4 規範)

  • 英數字元 a-z A-Z 0-9、特殊字元 .-*_ 保持不變。
  • 空格轉為 +。
  • 其他字元依編碼方案 (預設 UTF-8) 轉為位元組,每位元組以 %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 等
}

注意事項

  • CLDC 無 Character 完整 API,十六進位轉換自行實作 forDigit()。
  • 編碼例外 (UnsupportedEncodingException) 內部捕獲並重置緩衝區繼續處理,確保健壯性。
  • 若平台預設編碼非 UTF-8,建議顯式呼叫 encode(str, "UTF-8") 保證跨平台一致性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved