in reply to POSIX::strftime encoding

"without_utf8" contains the correct utf8 date

That is actually correct. "fr_FR.utf8" means that, because of the utf8 string, utf8 is default. You don't need to call utf8 because perl will do it automatically; however, if you call utf8, the wrong move, then you get some weird stuff in return.

Try this with your locale fr_FR. Calling binmode should work for you:

#!/usr/bin/perl use strict; use warnings; use Time::Piece; open STDOUT, '>', 'time.log'; my $t = localtime; print $t->strftime("%c"), "\n"; my $mt = localtime; binmode STDOUT, ":utf8"; print $mt->strftime("%c"), "\n";

Replies are listed 'Best First'.
Re^2: POSIX::strftime encoding
by squentin (Sexton) on Aug 25, 2010 at 12:43 UTC

    Yes, I understand what is happening, that's not what I'm asking, sorry if I wasn't clear, let me rephrase it.

    What I want is use the return value of POSIX::strftime in gtk2, the bindings use utf8::upgrade on all the strings sent to gtk2 functions.

    The question is how do I make sure the string isn't mangled by that, do I :

    a) consider the locale is utf8, and use utf8::decode on it to turn on its utf8 flag.

    b) use some unknown function that will use the locale to correctly decode the string from whatever encoding the locale is using, and turn it into a valid utf8 string.

    c) implement the unknown b) function myself

    And also 2 related questions:
    - is it a bug ?
    - shouldn't this be documented in the man page for POSIX::strftime ?