Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > strftime return value encoding (mbcs, locale, etc.)

Reply
Thread Tools

strftime return value encoding (mbcs, locale, etc.)

 
 
Giovanni Bajo
Guest
Posts: n/a
 
      01-27-2008
Hello,

I am trying to find a good way to portably get the output of strftime()
and put it onto a dialog (I'm using PyQt, but it doesn't really matter).
The problem is that I need to decode the byte stream returned by strftime
() into Unicode.

This old bug:
http://mail.python.org/pipermail/python-bugs-list/2003-
November/020983.html

(last comment) mentions that it is "byte string in the locale's encoding".

The comment also suggests to use "mbcs" in Windows (which, AFAIK, it's
sort of an "alias" encoding for the current Windows codepage), and to
find out the exact encoding using locale.getpreferredencoding().

Thus, I was hoping that something like:

strftime("%#c", localtime()).decode(locale.getpreferredencoding())

would work... but alas I was reported this exception:

LookupError: unknown encoding: cp932

So: what is the correct code to achieve this? Will something like this
work:

data = strftime("%#c", localtime())
if os.name == "nt":
data = data.decode("mbcs")
else:
data = dada.decode(locale.getpreferredencoding())

Is this the correct way of doing it? (Yes, it sucks).

Shouldn't Python automatically alias whatever is returned by
locale.getpreferredencoding() to "mbcs", so that my original code works
portably?

Thanks in advance!
--
Giovanni Bajo
 
Reply With Quote
 
 
 
 
Mark Tolonen
Guest
Posts: n/a
 
      01-27-2008

"Giovanni Bajo" <(E-Mail Removed)> wrote in message
news:%D5nj.2630$(E-Mail Removed)...
> Hello,
>
> I am trying to find a good way to portably get the output of strftime()
> and put it onto a dialog (I'm using PyQt, but it doesn't really matter).
> The problem is that I need to decode the byte stream returned by strftime
> () into Unicode.
>
> This old bug:
> http://mail.python.org/pipermail/python-bugs-list/2003-
> November/020983.html
>
> (last comment) mentions that it is "byte string in the locale's encoding".
>
> The comment also suggests to use "mbcs" in Windows (which, AFAIK, it's
> sort of an "alias" encoding for the current Windows codepage), and to
> find out the exact encoding using locale.getpreferredencoding().
>
> Thus, I was hoping that something like:
>
> strftime("%#c", localtime()).decode(locale.getpreferredencoding())
>
> would work... but alas I was reported this exception:
>
> LookupError: unknown encoding: cp932
>
> So: what is the correct code to achieve this? Will something like this
> work:
>
> data = strftime("%#c", localtime())
> if os.name == "nt":
> data = data.decode("mbcs")
> else:
> data = dada.decode(locale.getpreferredencoding())
>
> Is this the correct way of doing it? (Yes, it sucks).
>
> Shouldn't Python automatically alias whatever is returned by
> locale.getpreferredencoding() to "mbcs", so that my original code works
> portably?
>
> Thanks in advance!
> --
> Giovanni Bajo


Odd, what version of Python are you using? Python 2.5 works:

>>> import time,locale
>>> time.strftime('%#c').decode(locale.getpreferredenc oding()) # cp1252 on
>>> my system

u'Sunday, January 27, 2008 12:56:30'
>>> time.strftime('%#c').decode('cp932')

u'Sunday, January 27, 2008 12:56:40'
>>> time.strftime('%#c').decode('mbcs')

u'Sunday, January 27, 2008 12:56:48'

--Mark

 
Reply With Quote
 
 
 
 
Martin v. Löwis
Guest
Posts: n/a
 
      01-27-2008
> LookupError: unknown encoding: cp932

What Python version are you using? cp932 is supported cross-platform
since Python 2.4.

> So: what is the correct code to achieve this? Will something like this
> work:
>
> data = strftime("%#c", localtime())
> if os.name == "nt":
> data = data.decode("mbcs")
> else:
> data = dada.decode(locale.getpreferredencoding())
>
> Is this the correct way of doing it?


Not necessarily. On some systems, and in some locales, Python will not
have any codec that converts the locale's encoding to Unicode.

In such a case, using ASCII with replacement characters might be the
best bet, as long as the locale's charset is an ASCII superset (i.e.
you don't work on an EBCDIC machine).

> Shouldn't Python automatically alias whatever is returned by
> locale.getpreferredencoding() to "mbcs", so that my original code works
> portably?


No. The "mbcs" codec has a slightly different semantics from the cp932
codec, on your system. Specifically, the "mbcs" codec might map
characters as approximations, whereas the cp932 codec will give errors
if a certain Unicode character is not supported in the target character
set.

Regards,
Martin
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
what value does lack of return or empty "return;" return Greenhorn C Programming 15 03-06-2005 08:19 PM
getting return value from function without return statement. Seong-Kook Shin C Programming 1 06-18-2004 08:19 AM
strftime not working as expected Bryan O'Malley C++ 8 02-17-2004 08:34 AM
gcc 3.3, solaris 8, compile error - 'strftime', 'localtime', etc. "not declared" Bimal C Programming 1 08-20-2003 12:33 PM
Return a return value from Perl to Javascript PvdK Perl 0 07-24-2003 09:20 AM



Advertisments