코드 페이지 및 유니코드 문자열
IPropertySetStorage구현하는 또 다른 고려 사항은 유니코드 문자열을 사용하지 않는 속성 ID 0(속성 이름 사전)에 유니코드 속성 이름이 저장되는 방식입니다.
유니코드의 공식적으로 코드 페이지 값은 1200입니다. 속성 이름 사전에 유니코드 값을 저장하려면 IPropertySetStorage::CreatePROPSETFLAG_ANSI 플래그가 없으면 지정된 전체 속성 집합(속성 ID 1)에 대해 1200의 코드 페이지 값을 사용합니다. 이는 유니코드에 설정된 속성에 모든 문자열 값을 저장하는 부작용이 있다는 점에 유의하세요. 모든 코드 페이지에서 VT_LPSTR 시작 부분에 있는 개수는 문자 수가 아니라 바이트 수입니다. 이는 이전 버전 클라이언트와의 호환성을 제공하기 위해 필요합니다.
IPropertySetStorage 복합 파일 구현은 유니코드(코드 페이지 1200) 또는 현재 시스템 ANSI 코드 페이지에서 완전히 모든 새 속성 집합을 만듭니다. 이는 IPropertySetStorage::CreategrfFlags 매개 변수에 PROPSETFLAG_ANSI 플래그가 없거나 존재하여 제어됩니다.
속성 집합을 유니코드로 만들고 엽니다. 이를 구현하려면 IPropertySetStorage::CreategrfFlags 매개 변수에 PROPSETFLAG_ANSI 플래그를 설정하지 마세요. VT_LPSTR 값을 사용하지 말고 대신 VT_LPWSTR 값을 사용합니다. 속성 집합의 코드 페이지가 유니코드인 경우 VT_LPSTR 문자열 값은 저장될 때 유니코드로 변환되고 검색 시 다시 멀티바이트 문자열 값으로 변환됩니다.
IPropertyStorage::Stat 호출을 통해 보고된 대로 PROPSETFLAG_ANSI 플래그를 설정하면 기본 코드 페이지가 유니코드인지 아닌지 여부가 반영됩니다. 코드 페이지를 알아보려면 속성 ID 1을 명시적으로 읽을 수 있습니다.
IPropertyStorage::ReadMultiple호출을 통해 속성 ID 1에 액세스할 수 있습니다. 그러나 읽기 전용이며 WriteMultiple업데이트되지 않을 수 있습니다. 또한 DeleteMultiple함께 삭제할 수 없습니다.