我正在處理一個使用 INI 檔案的遺留專案,我目前正在嘗試了解 Microsoft 如何處理 INI 檔案。
WritePrivateProfileStringA() [MSDN]的檔案說lpFileName:
如果檔案是使用 Unicode 字符創建的,則該函式會將 Unicode 字符寫入檔案。否則,該函式將寫入 ANSI 字符。
這到底是什么意思呢?什么是“使用 Unicode 字符創建”的檔案?Microsoft 如何確定檔案是否是使用 Unicode 字符創建的?
由于這是在 下記錄的lpFileName,它們是否參考檔案名中的 Unicode 字符,例如“如果檔案具有日語檔案名,我們將其讀取為 Unicode”?
uj5u.com熱心網友回復:
默認情況下,...A()和...W()方法都不支持 Unicode 作為 INI 檔案的檔案內容。例如,如果該檔案不存在,則它們都將創建一個具有 ANSI 內容的檔案。
但是,如果您首先創建INI檔案,你給它一個UTF-16 BOM(位元組順序標記),兩者...A()并...W()會將該BOM和寫入UTF-16字符尊重該檔案。
除了 BOM 之外,該檔案可以是空的,因此包含0xFF 0xFE內容的 2 位元組檔案足以讓 Microsoft API 寫入 Unicode 字符。
這兩種方法都不會識別和尊重 UTF-8 BOM。事實上,如果 UTF-8 BOM 和第一部分都在第 1 行,則 UTF-8 BOM 可以破壞現有檔案。在這種情況下,您無法訪問受影響部分中的任何鍵。如果第一部分在第 2 行,則 UTF-8 BOM 將不起作用。
我在 Windows 10 21H1 上的測驗無法確認有關2006 年支持 UTF16-BE的宣告:
只是為了好玩,您甚至可以反轉 BOM 位元組,WritePrivateProfileString 會將其作為 UTF-16 BE(大端)檔案寫入!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/391723.html
