字碼頁和 Unicode 字串
實作 IPropertySetStorage 的另一個考慮是 Unicode 屬性名稱儲存在屬性識別碼 0 (屬性名稱字典) ,這不會使用 Unicode 字串。
Unicode 正式具有 1200 的字碼頁值。 若要將 Unicode 值儲存在屬性名稱字典中,請在IPropertySetStorage::Create中沒有PROPSETFLAG_ANSI旗標所指定的屬性識別碼 1) (中,針對整個屬性集使用 1200 的字碼頁值。 請注意,這具有將所有字串值儲存在 Unicode 屬性集中的副作用。 在所有字碼頁中,在 VT_LPSTR 開頭找到的計數是位元組計數,而不是字元計數。 這必須提供與舊版用戶端的相容性。
IPropertySetStorage的複合檔案實作會在 Unicode (字碼頁 1200) 或目前系統 ANSI 字碼頁中完全建立所有新的屬性集。 這是由IPropertySetStorage::Create的grfFlags參數中不存在或存在PROPSETFLAG_ANSI旗標所控制。
建立並開啟屬性集做為 Unicode。 若要實作此動作,請勿在IPropertySetStorage::Create的grfFlags參數中設定PROPSETFLAG_ANSI旗標。 請避免使用 VT_LPSTR 值,而是改用 VT_LPWSTR 值。 當屬性集的字碼頁是 Unicode 時, VT_LPSTR 字串值會在儲存時轉換成 Unicode,並在擷取時轉換成多位元組字元串值。
透過呼叫IPropertyStorage::Stat所回報的PROPSETFLAG_ANSI旗標會反映基礎字碼頁是否為 Unicode。 請注意,可以明確閱讀屬性識別碼 1 來瞭解字碼頁。
您可以透過 呼叫 IPropertyStorage::ReadMultiple來存取屬性識別碼 1。 不過,它是唯讀的,而且可能不會使用 WriteMultiple進行更新。 此外,可能無法使用 DeleteMultiple刪除它。