469,929 Members | 1,797 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,929 developers. It's quick & easy.

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

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
Jan 27 '08 #1
2 3229

"Giovanni Bajo" <ra***@develer.comwrote in message
news:%D****************@tornado.fastwebnet.it...
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.getpreferrede ncoding()) # 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

Jan 27 '08 #2
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
Jan 27 '08 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

5 posts views Thread by Edward K. Ream | last post: by
4 posts views Thread by John Hunter | last post: by
8 posts views Thread by Bryan O'Malley | last post: by
4 posts views Thread by Andy Leszczynski | last post: by
4 posts views Thread by Sibylle Koczian | last post: by
12 posts views Thread by param | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.