http://www.perlmonks.org?node_id=955194


in reply to Re^4: Windows NTFS UTF-16LE File-Operations
in thread Windows NTFS UTF-16LE File-Operations

You need to encode back to octets the return of Win32::GetLongPathName(), because say is printing out octets. Win32::FindFile is most likely doing that for you already.

Which encoding you choose should depend on what your console expects (to be able to redisplay the characters).

Try:
perl -MEncode -E "say encode( 'UTF-8', Win32::GetLongPathName( $_ ) ) +for glob '*'"

If 'UTF-8' doesn't work out, choose another encoding that works well with your console. Bear in mind that the UTF-8 encoding may be fine as-is, and that the console just needs better fonts (which is not your case, because I infer that you can see the characters displayed properly using Win32::FindFile).

Replies are listed 'Best First'.
Re^6: Windows NTFS UTF-16LE File-Operations
by BrowserUk (Patriarch) on Feb 21, 2012 at 00:53 UTC

    Yes. That seems to work. I thought that -C0 would take care of that for me...I'm just very glad that I don't have to deal with this crap!


    \test\junk>perl -C0 -E"say Win32::GetLongPathName( $_ ) for glob '*'"
    acent�.txt
    Wide character in print at -e line 1.
    ελληνικά
    ικά


    C:\test\junk>perl -MEncode -E "say encode('UTF-8', Win32::GetLongPathName( $_ ) ) for glob '*'"
    acentó.txt

    ελληνικά
    ικά


    C:\test\junk>dir
    12/11/2010 05:58 7 acentó.txt
    20/11/2010 09:46 <DIR> ελληνικά

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

    The start of some sanity?