初學 J2ME 時,嘗試讓 MIDlet 與 C# 架設的 HTTP 端點通訊,發現中文參數傳遞會產生亂碼。查閱論壇資訊,最簡單的做法是雙方皆使用 UTF-8 編碼,並採用 DataOutputStream.writeUTF() / DataInputStream.readUTF()。但若伺服端為 C# (ASP.NET),不想大動干戈修改伺服端代碼,該如何在客戶端最小調整下解決?
Web.config 的 <globalization requestEncoding="utf-8" responseEncoding="utf-8" />(預設即為 UTF-8)。DataInputStream 讀取位元組陣列,再以 new String(bytes, "UTF-8") 解碼。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 服務。