Freigeben über


Codeseiten und Unicode-Zeichenfolgen

Ein weiterer Aspekt bei der Implementierung von IPropertySetStorage ist, wie Unicode-Eigenschaftsnamen in der Eigenschafts-ID 0 (dem Eigenschaftennamenwörterbuch) gespeichert werden, bei dem keine Unicode-Zeichenfolgen verwendet werden.

Unicode hat offiziell einen Codepagewert von 1200. Verwenden Sie zum Speichern von Unicode-Werten im Eigenschaftennamenwörterbuch einen Codeseitenwert von 1200 für den gesamten Eigenschaftensatz (in Eigenschafts-ID 1), der durch das Fehlen des PROPSETFLAG_ANSI Flags in IPropertySetStorage::Createangegeben ist. Beachten Sie, dass dies den Nebeneffekt hat, alle Zeichenfolgenwerte im Eigenschaftensatz in Unicode zu speichern. Auf allen Codeseiten ist die Anzahl, die am Anfang einer VT_LPSTR gefunden wurde, eine Byteanzahl, keine Zeichenanzahl. Dies ist erforderlich, um Kompatibilität mit Clients mit früheren Versionen bereitzustellen.

Die zusammengesetzte Dateiimplementierung von IPropertySetStorage erstellt alle neuen Eigenschaftensätze vollständig in Unicode (Codepage 1200) oder auf der aktuellen System-ANSI-Codeseite. Dies wird durch das Fehlen oder Vorhandensein des PROPSETFLAG_ANSI Flags im grfFlags Parameter von IPropertySetStorage::Creategesteuert.

Erstellen und Öffnen von Eigenschaftensätzen als Unicode. Um dies zu implementieren, legen Sie das PROPSETFLAG_ANSI Flag im grfFlags Parameter von IPropertySetStorage::Createnicht fest. Vermeiden Sie VT_LPSTR Werte, und verwenden Sie stattdessen VT_LPWSTR Werte. Wenn die Codepage des Eigenschaftensatzes Unicode ist, werden VT_LPSTR Zeichenfolgenwerte beim Speichern in Unicode konvertiert, und zurück zu Multibyte-Zeichenfolgenwerten, wenn sie abgerufen werden.

Das Festlegen des PROPSETFLAG_ANSI Flags durch einen Aufruf von IPropertyStorage::Stat gibt an, ob die zugrunde liegende Codeseite Unicode ist oder nicht. Beachten Sie, dass Eigenschafts-ID 1 explizit gelesen werden kann, um die Codeseite zu erlernen.

Sie können über einen Aufruf von IPropertyStorage::ReadMultipleauf Eigenschafts-ID 1 zugreifen. Es ist jedoch schreibgeschützt und kann nicht mit WriteMultipleaktualisiert werden. Darüber hinaus kann es nicht mit DeleteMultiplegelöscht werden.