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

Android EditText 取值轉 String 亂碼?正確姿勢一行搞定

     編輯:程式設計綜合問答

錯誤示範

// ❌ 錯誤:getText() 回傳 Editable,直接 getBytes 轉碼會破壞字元
String s = editText.getText().toString(); // 正確但常被誤寫
String bad = new String(editText.getText().toString().getBytes("ISO-8859-1"), "UTF-8"); // 錯誤示範

正確寫法(兩種皆可)

// ✅ 方式 1:標準 toString()
String text = editText.getText().toString();

// ✅ 方式 2:字串串接隱式呼叫 toString()
String text = editText.getText() + "";

為什麼不需要手動轉碼?

  • EditText.getText() 回傳 Editable(實作 CharSequence),內部以 UTF-16 儲存 Unicode 字元。
  • toString() 直接產生 Java String(同樣 UTF-16),不涉及位元組編碼轉換,故無亂碼問題。
  • 只有當你需要 byte[] 傳輸/儲存時,才需指定 StandardCharsets.UTF_8:
    byte[] bytes = text.getBytes(StandardCharsets.UTF_8);

常見誤區

❌ 「中文要用 ISO-8859-1 轉 UTF-8」 → 這是舊版 Servlet request.getParameter() 時代的殘留技巧,現代框架(Spring MVC、Retrofit、OkHttp)皆自動處理編碼。
❌ 「EditText 內容是 bytes」 → 錯誤,它是字元序列。

除錯技巧

// 除錯:檢查字元碼點
String s = editText.getText().toString();
for (int i = 0; i < s.length(); i++) {
    int cp = s.codePointAt(i);
    Log.d("DEBUG", "char[" + i + "] = U+" + Integer.toHexString(cp).toUpperCase());
}

若碼點正常但顯示異常,請檢查 字型是否支援該文字(如缺少中文字型會顯示 □/豆腐塊)。

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