Class Encoding

java.lang.Object
tools.Encoding

public final class Encoding extends Object
集中管理字元集,移除對 JVM 預設字元集 (file.encoding) 的隱性依賴。

背景:本伺服器長期執行於 zh-TW Windows,JDK 8 實測預設 file.encoding = MS950 (Big5 的微軟超集)。所有「未明確指定字元集」的呼叫 — 例如單參數 new String(byte[])、 無參數 String.getBytes()、未帶 Charset 的 InputStreamReader / OutputStreamWriter 等 — 目前都隱性解析為 MS950。

自 Java 18 起 (JEP 400) 預設字元集固定為 UTF-8,上述呼叫在新版 JDK 會改用 UTF-8, 導致設定檔、log、檔案 I/O 的中文全部變亂碼。為了在升級 JDK 後維持「與現在完全相同」 的行為,所有原本依賴平台預設的呼叫,改為明確指定 DEFAULT

注意:與 149.2 用戶端往來的封包字串編碼,程式碼中已另外明確使用 "Big5" (見 MaplePacketLittleEndianWriter / LittleEndianAccessor / HexTool), 不屬於本類別管轄,也不受 JEP 400 影響,維持原樣。

  • Field Details

    • DEFAULT

      public static final Charset DEFAULT
      被「凍結」的歷史平台預設字元集 = MS950。

      凡是過去依賴 JVM 預設 (file.encoding) 的檔案 / log / 一般字串位元組轉換, 一律改用此常數,使其行為不隨 JDK 版本 (JEP 400) 改變。日後若要全面改用 UTF-8, 只需調整此處並一併轉檔。