當應用程式存在已非 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)。
-
本地編碼會依下列順序決定:
- 掃描參數所指定的編碼(例如:Encoding,Big5)
- 執行環境中所設定的編碼(若該應用程式有使用自訂執行環境)
- 儲存體設定檔案(storage.config,又稱為叢集設定檔案)中所設定的編碼
- 在本地編碼的檔案中出現頻率最高的本地編碼
問題排除
請按照以下步驟來解決編碼問題:
.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 將會選擇出現次數最多的本地編碼。
- 當應用程式包含多種本地編碼時,請將其修改為一致,再重新執行掃描。