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

JAD 中文屬性亂碼徹底解決方案

     編輯:J2ME

問題現象

JAD/MANIFEST 中文欄位 (MIDlet-Name、MIDlet-Description、MIDlet-Vendor) 在手機/模擬器顯示亂碼、方塊字、甚至導致安裝失敗。

根本原因

  • J2ME 規範規定:**JAD/MANIFEST 必須以 UTF-8 編碼儲存**
  • Windows 記事本預設儲存為 **ANSI (GBK/Big5)**
  • WTK jadtool / Ant 任務生成的 JAD 亦常為平台預設編碼
  • 手機解析器按 UTF-8 讀取 → 位元組解讀錯誤 → 亂碼

標準解決流程 (推薦)

  1. 混淆/優化 (可選):ProGuard 處理 JAR,減小體積並保護代碼
  2. 提取 MANIFEST.MF:用 WinRAR/7-Zip 開啟 JAR,拖出 META-INF/MANIFEST.MF
  3. 編輯 MANIFEST:用 **Notepad++ / VS Code / Sublime** 開啟
    • 修改中文欄位
    • Encoding → Convert to UTF-8 (無 BOM)
    • 存檔覆蓋
  4. 放回 JAR:將修改後的 MANIFEST.MF 拖回 META-INF/ 覆蓋
  5. 生成 JAD:不要手工寫 JAD,使用專用工具:
    • WTK jadtool -jar MyGame.jar (會讀取 JAR 內 MANIFEST 自動生成)
    • 或線上/第三方 JAD 生成器 (搜尋 "JAD Generator")
  6. 修正 JAD 編碼:同樣用編輯器開啟生成的 JAD,**另存為 UTF-8 無 BOM**
  7. 驗證:模擬器/真機安裝測試,檢查應用程式清單中文顯示

關鍵細節避坑

誤區正確做法
直接用記事本修改 JAD 存檔記事本存檔常帶 BOM 或非 UTF-8,必須用支援編碼轉換的編輯器
JAD 與 MANIFEST 編碼不一致兩者**必須同為 UTF-8 無 BOM**
中文長度過長MIDlet-Name 建議 < 30 字元,超長會被截斷或換行
奇數/偶數字元長度影響純屬謠言,UTF-8 無此問題
JAR 內 MANIFEST 未同步更新JAD 僅供安裝參考,**手機實際讀取 JAR 內 MANIFEST**,兩者內容必須一致

Ant 自動化腳本片段 (一勞永逸)

<target name="build-jad" depends="jar">
    <!-- 1. 確保 MANIFEST 為 UTF-8 -->
    <copy file="src/META-INF/MANIFEST.MF" tofile="build/MANIFEST.MF" encoding="UTF-8"/>
    
    <!-- 2. 更新 JAR 內 MANIFEST -->
    <jar jarfile="build/MyGame.jar" update="true" manifest="build/MANIFEST.MF"/>
    
    <!-- 3. 生成 JAD (WTK jadtool 需在 classpath) -->
    <exec executable="jadtool" failonerror="true">
        <arg value="-jar"/>
        <arg value="build/MyGame.jar"/>
        <arg value="-output"/>
        <arg value="build/MyGame.jad"/>
    </exec>
    
    <!-- 4. 強制 JAD 為 UTF-8 -->
    <copy file="build/MyGame.jad" tofile="build/MyGame.jad" encoding="UTF-8"/>
</target>

總結

**核心鐵律:MANIFEST 與 JAD 均為 UTF-8 無 BOM**。工具鏈固化 (Ant/Maven/Gradle + 編輯器規範) 可徹底杜絕人為疏漏。遇到亂碼,先檢查兩檔案實際編碼 (Notepad++ 右下角顯示),再按流程修正。

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