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

Java 方法間傳遞 UTF-8 編碼字符串的正確異常處理姿勢

     編輯:程式設計綜合問答

問題代碼


public String Phintx() {
    Scanner cc = new Scanner(System.in);
    String tt = new String(cc.next().getBytes(), "utf-8"); // 拋 UnsupportedEncodingException
    return tt;
}

編譯報錯:未處理 UnsupportedEncodingException(受檢異常)。

原因

String(byte[], String) 構造器聲明拋出 UnsupportedEncodingException,Java 強制要求捕獲或聲明拋出。

正確處理方式

方式一:try-catch 內部消化(推薦工具方法)


public String Phintx() {
    Scanner cc = new Scanner(System.in);
    String tt = "";
    try {
        tt = new String(cc.next().getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8.name());
    } catch (UnsupportedEncodingException e) {
        // UTF-8 是 Java 平台保證支持的編碼,理論不會發生
        // 記錄日誌或拋運行時異常
        throw new IllegalStateException("JVM missing UTF-8", e);
    }
    return tt;
}

方式二:拋出給調用者


public String Phintx() throws UnsupportedEncodingException {
    Scanner cc = new Scanner(System.in);
    return new String(cc.next().getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8.name());
}

關鍵改進點

  • 使用 StandardCharsets.UTF_8 避免硬編碼字符串拼寫錯誤。
  • cc.next() 讀取單詞(遇空白停止),若需整行請用 cc.nextLine()。
  • getBytes() 無參數版本使用平台默認編碼,再轉 UTF-8 可能導致雙重編碼錯亂。直接用 StandardCharsets.UTF_8 讀寫更安全。

簡化寫法 (Java 7+)


// 讀取控制台輸入已按控制台編碼解碼為 String,通常無需再轉碼
String input = new Scanner(System.in, StandardCharsets.UTF_8.name()).nextLine();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved