排除編碼問題

2023/6/12 |

當應用程式存在已非 UTF-8 編碼且包含非拉丁字元的檔案時,編碼可能會造成 Lucent Sky AVM 掃描發生錯誤。在本文中,我們將幫助你了解 Lucent Sky AVM 在掃描時針對編碼的處理方式,以及修正這些錯誤的步驟。

Lucent Sky AVM 處理編碼的機制

.NET 應用程式

.NET 應用程式的編碼處理方式和下方所有應用程式段落中所描述的相同,除了在組建階段-這是由 .NET Framework 和 Microsoft Build Tools 所管理的。MSBuild 和 ASP.NET Compilation Tool 使用作業系統的系統地區設定(又稱為非 Unicode 程式的語言)作為本地編碼。

Java 應用程式

Lucent Sky AVM 將會尋找 org.eclipse.core.resources.prefs 檔案,這是 Eclipse 所使用的編碼檔案。

  • 若存在 org.eclipse.core.resources.prefs 檔案,Lucent Sky AVM 會採用檔案內的設定。對於 org.eclipse.core.resources.prefs 中未設定的檔案,將採用和所有應用程式段落中相同的偵測方式。

若不存在 org.eclipse.core.resources.prefs 檔案,將採用和下方所有應用程式段落中相同的偵測方式。

所有應用程式

  • Lucent Sky AVM 會偵測各檔案的編碼方式,判斷其為 Unicode(例如:UTF-8)或本地編碼(native encoding,例如:Big5、Shift JIS 或 Windows-1252)。

  • 本地編碼會依下列順序決定:

    1. 掃描參數所指定的編碼(例如:Encoding,Big5
    2. 執行環境中所設定的編碼(若該應用程式有使用自訂執行環境)
    3. 儲存體設定檔案(storage.config,又稱為叢集設定檔案)中所設定的編碼
    4. 在本地編碼的檔案中出現頻率最高的本地編碼

問題排除

請按照以下步驟來解決編碼問題:

.NET 應用程式

由於 MSBuild 和 ASP.NET Compilation Tool 使用作業系統的系統地區設定作為本地編碼,當應用程式的本地編碼和 Lucent Sky AVM 實體的系統地區設定不同時,就可能產生編碼問題。

要指定 MSBuild 所使用的本地編碼,你可以設定專案檔案中 <CodePage> 標籤的值(例如 <CodePage>932</CodePage>)。你亦可透過設定 BuildProperties 掃描參數來設定 CodePage 內容的值(例如 BuildProperties,CodePage=932)。

要指定 ASP.NET Compilation Tools 所使用的本地編碼,你可以設定應用程式頂層 web.config 檔案中 <configuration/system.web/globalization> 元素的 fileEncoding 屬性(例如 <globalization fileEncoding="Big5" />)。

Java 應用程式

  • 若存在 org.eclipse.core.resources.prefs 檔案,請檢查該檔案是否格式正確、發生問題的程式碼檔案是否被設定成正確的編碼。
  • 若你無法確定 org.eclipse.core.resources.prefs 檔案內容的正確性,也可以嘗試刪除該檔案由 Lucent Sky AVM 偵測應用程式的編碼。
  • 若不存在 org.eclipse.core.resources.prefs 檔案,請參考下方的所有應用程式段落。

所有應用程式

  • 確認掃描參數是否有設定編碼?是否為正確的編碼?
  • 確認執行環境是否有設定編碼?是否為正確的編碼?
  • 確認是否有設定系統編碼?是否為正確的編碼?
  • 確認應用程式內的本地編碼只有一種。若應用程式中存在兩種或以上的本地編碼時,Lucent Sky AVM 將會選擇出現次數最多的本地編碼。
  • 當應用程式包含多種本地編碼時,請將其修改為一致,再重新執行掃描。