Partilhar via


Properties coding expedition #5 - Stripping characters

In Part 4, I discovered that WideCharToMultiByte converts certain invisible non-spacing Unicode characters to ?. This makes the output look really silly in a command line application. I want to keep this as a command line application, so I need to strip these characters away. A simple helper solves this rather neatly:

 void _StripCharacters(__inout PWSTR pszText, __in PCWSTR pszRemove)
{
    PWSTR pszSource = pszText;
    PWSTR pszDest = pszSource;
    while (*pszSource)
    {
        // Skip copying characters found in pszRemove
        if (!StrChr(pszRemove, *pszSource))
        {
            *pszDest = *pszSource;
            pszDest++;
        }
        pszSource++;
    }
    *pszDest = 0;   // NULL terminate
}

This modifies the input string, omitting any characters found in pszRemove. Nothing fancy. Now I call it when I want to send a string to the console:

 ... from part 3 ...
PWSTR pszValue;
hr = ppropdesc->FormatForDisplay(propvar, PDFF_DEFAULT, &pszValue);
if (SUCCEEDED(hr))
{
    // LRM RLM LRE RLE PDF LRO RLO
    _StripCharacters(pszValue, L"\x200e\x200f\x202a\x202b\x202c\x202d\x202e");  
    wprintf(L"%s: %s\n", pszLabel, pszValue);
    CoTaskMemFree(pszValue);
}
...

Now the output is free of those annoying question marks:

 Date last saved: 9/29/2006 10:12 PM
Width: 1139 pixels
Height: 769 pixels
Horizontal resolution: 200 dpi
Vertical resolution: 200 dpi
Bit depth: 24
Dimensions: 1139 x 769

Comments

  • Anonymous
    November 05, 2006
    This coding expedition has developed a tool that can dump out all the properties on a file. If you are