Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

portable unicode literals

25 views
Skip to first unread message

Ulrich Eckhardt

unread,
Oct 15, 2012, 9:05:01 AM10/15/12
to
Hi!

I need a little nudge in the right direction, as I'm misunderstanding
something concerning string literals in Python 2 and 3. In Python 2.7,
b'' and '' are byte strings, while u'' is a unicode literal. In Python
3.2, b'' is a byte string and '' is a unicode literal, while u'' is a
syntax error.

This actually came as a surprise to me, I assumed that using b'' I could
portably create a byte string (which is true) and using u'' I could
portably create a unicode string (which is not true). This feature would
help porting code between both versions. While this is a state I can
live with, I wonder what the rationale for this is.

!puzzled thanks

Uli

Steven D'Aprano

unread,
Oct 15, 2012, 9:26:01 AM10/15/12
to
It was a mistake that is corrected in Python 3.3.

You can now use u'' to create Unicode literals in both 2.x and 3.3 or
better. This is a feature only designed for porting code though: you
shouldn't use u'' in new code not intended for 2.x.


--
Steven

Dave Angel

unread,
Oct 15, 2012, 9:32:22 AM10/15/12
to Ulrich Eckhardt, pytho...@python.org
Python 3.3 added that syntax, for easier porting. You can now use
u"xyz" for a unicode string in both 2.x and 3.3

--

DaveA

Alex Strickland

unread,
Oct 15, 2012, 9:41:40 AM10/15/12
to pytho...@python.org
On 2012/10/15 03:05 PM, Ulrich Eckhardt wrote:

> This actually came as a surprise to me, I assumed that using b'' I could
> portably create a byte string (which is true) and using u'' I could
> portably create a unicode string (which is not true). This feature would
> help porting code between both versions. While this is a state I can
> live with, I wonder what the rationale for this is.
>
> !puzzled thanks

u'' is legal in 3.3 again.

--
Regards
Alex

Serhiy Storchaka

unread,
Oct 15, 2012, 1:11:45 PM10/15/12
to pytho...@python.org
from __future__ import unicode_literals

And now you can portable use b'' for a byte string and '' for a unicode
string. When you will drop Python 2 support then just remove import from
__future__.


Duncan Booth

unread,
Oct 16, 2012, 4:44:56 AM10/16/12
to
and if you want it to work in 3.1 and 3.2 there is the uprefix import hook:
https://bitbucket.org/vinay.sajip/uprefix


--
Duncan Booth http://kupuguy.blogspot.com
0 new messages