|Just another Perl shrine|
POSIX::strftime encodingby squentin (Sexton)
|on Aug 24, 2010 at 20:10 UTC||Need Help??|
squentin has asked for the
wisdom of the Perl Monks concerning the following question:
How do I get a utf8 time string using POSIX::strftime ?
When using a utf8 locale, for example fr_FR.utf8, the output of POSIX::strftime is encoded in utf8 but without the utf8 flag on, ie: returns a byte string and not a character string. So when using utf8::upgrade on it (what the gtk2 bindings do), or when printing it to a file using ">:utf8", the non-ascii characters become garbage.
And of course, when using a non-utf8 locale such as fr_FR, the return value of POSIX::strftime is encoded in a locale specific encoding.
So what is the best way to get a proper utf8 string ? Do I really have to look at the locale value myself to know how to convert the string ?
Shouldn't that behavior be considered a bug ? (though probably hard to fix without breaking some existing programs) It should at least be mentioned in the documentation.
(tested with perl v5.10.1 and v5.12.1)