How to 'de-slashify' a string?

Vlastimil Brom vlastimil.brom at gmail.com
Sat Aug 22 12:33:32 CEST 2009


2009/8/22 AK <ak at nothere.com>:
> 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
> --
> http://mail.python.org/mailman/listinfo/python-list
>


Hi,
do you mean something like

>>> u"\u0303"
u'\u0303'
>>> print u"\u0303"
̃
    ̃ (dec.: 771)  (hex.: 0x303)   ̃ COMBINING TILDE (Mark, Nonspacing)
?

vbr



More information about the Python-list mailing list