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

解決 J2ME 與 C# HTTP 通訊的中文亂碼問題

     編輯:J2ME

問題背景

初學 J2ME 時,嘗試讓 MIDlet 與 C# 架設的 HTTP 端點通訊,發現中文參數傳遞會產生亂碼。查閱論壇資訊,最簡單的做法是雙方皆使用 UTF-8 編碼,並採用 DataOutputStream.writeUTF() / DataInputStream.readUTF()。但若伺服端為 C# (ASP.NET),不想大動干戈修改伺服端代碼,該如何在客戶端最小調整下解決?

解決方案

  1. 伺服端設定:確認 Web.config 的 <globalization requestEncoding="utf-8" responseEncoding="utf-8" />(預設即為 UTF-8)。
  2. 客戶端讀取:使用 DataInputStream 讀取位元組陣列,再以 new String(bytes, "UTF-8") 解碼。

完整 MIDlet 範例

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;

public class HttpTest extends MIDlet {
    private Display display;

    public HttpTest() {
        display = Display.getDisplay(this);
    }

    protected void startApp() {
        try {
            String url = "https://192.168.0.25/lt133/webform1.aspx?phone=13800000000&msg1=c2";
            HttpConnection hc = (HttpConnection) Connector.open(url);
            DataInputStream dis = new DataInputStream(hc.openInputStream());

            byte[] buffer = new byte[100];
            int len = dis.read(buffer);
            String content = new String(buffer, 0, len, "UTF-8");

            Form form = new Form("HTTP Test");
            form.append(content);
            display.setCurrent(form);

            dis.close();
            hc.close();
        } catch (Exception e) {
            System.out.println(e.toString());
            notifyDestroyed();
        }
    }

    protected void pauseApp() {}
    protected void destroyApp(boolean unconditional) {}
}

關鍵點說明

  • Connector.open(url) 建立 HTTP 連線。
  • DataInputStream.read(byte[]) 讀取原始位元組,避免預設編碼差異。
  • new String(bytes, "UTF-8") 明確指定 UTF-8 解碼,與伺服端一致。
  • 若回傳內容超過緩衝區大小,實務上應迴圈讀取直到 -1。

這個做法只需調整客戶端讀取邏輯,無須修改 C# 端點代碼,適合快速整合現有 .NET 服務。

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