How to 'de-slashify' a string?
AK
ak at nothere.com
Sat Aug 22 06:09:20 EDT 2009
Steven D'Aprano wrote:
> On Sat, 22 Aug 2009 04:20:23 -0400, AK wrote:
>
>> Hi, if I have a string '\\303\\266', how can I convert it to '\303\266'
>> in a general way?
>
> It's not clear what you mean.
>
> Do you mean you have a string '\\303\\266', that is:
>
> backslash backslash three zero three backslash backslash two six six
>
> If so, then the simplest way is:
>
>>>> s = r'\\303\\266' # note the raw string
>>>> len(s)
> 10
>>>> print s
> \\303\\266
>>>> print s.replace('\\\\', '\\')
> \303\266
>
>
> Another possibility:
>
>>>> s = '\\303\\266' # this is not a raw string
>>>> len(s)
> 8
>>>> print s
> \303\266
>
> So s is:
> backslash three zero three backslash two six six
>
> and you don't need to do any more.
Well, I need the string itself to become '\303\266', not to print
that way. In other words, when I do 'print s', it should display
unicode characters if my term is set to show them, instead of
showing \303\266.
>
>
>> The problem I'm running into is that I'm connecting with pygresql to a
>> postgres database and when I get fields that are of 'char' type, I get
>> them in unicode, but when I get fields of 'byte' type, I get the text
>> with quoted slashes, e.g. '\303' becomes '\\303' and so on.
>
> Is pygresql quoting the backslash, or do you just think it is quoting the
> backslashes? How do you know? E.g. if you have '\\303', what is the
> length of that? 4 or 5?
Length is 4, and I need it to be length of 1. E.g.:
>>> s = '\303'
>>> s
'\xc3'
>>> x = '\\303'
>>> x
'\\303'
>>> len(x)
4
>>> len(s)
1
What I get from pygresql is x, what I need is s. Either by asking
pygresql to do this or convert it afterwards. I can't do
replace('\\303', '\303') because it can be any unicode character.
>
>
--
AK
More information about the Python-list
mailing list