hex value in string back to real hex value

J

jack

Hi everyone,

I get in a program an hexa value codes in a string for example \xe7
which correspond to a french character.

The string would be "\xe7t\xe7" and I want to write in a file été and
not \xe7t\xe7.

Sure I could write a function to analyse the string, find all the hexa
caracter (because of the \x) and convert the value to decimal and back
to the correct cahracter.

Is there something simplier ?

An example below for generating such a string :
a=""
a=a+"\\"
a=a+"x"
a=a+"e"
a=a+"7"
len(a)= 4 # so it is not understood as the hexa value !!
a
"\xe7"


Thanks in advance.

Jack.
 
V

vincent wehren

jack said:
Hi everyone,

I get in a program an hexa value codes in a string for example \xe7
which correspond to a french character.

The string would be "\xe7t\xe7" and I want to write in a file été and
not \xe7t\xe7.

Sure I could write a function to analyse the string, find all the hexa
caracter (because of the \x) and convert the value to decimal and back
to the correct cahracter.

Is there something simplier ?

An example below for generating such a string :
a=""
a=a+"\\"
a=a+"x"
a=a+"e"
a=a+"7"
len(a)= 4 # so it is not understood as the hexa value !!
a
"\xe7"


Thanks in advance.

Jack.

You might want to take a look at the binascii module.
 
P

Phil Frost

I'm not sure just what your problem is here. The best solution would be
to make your strings "\xe7" and not "\\xe7". The former contains the
real byte 0xe7, while the latter contains three bytes. When the former
is written to a file, you will get whatever letter 0xe7 represents
depending on what encoding you use.

If you have a reason to not do that (perhaps you are prompting for some
data and want escapes to be recgonized) then you could use something
like this:

a = sys.stdin.readline()
a = eval('"""'+a.replace('"""','"""+\'"""\'+"""')+'"""')
 
P

Peter Otten

jack said:
I get in a program an hexa value codes in a string for example \xe7
which correspond to a french character.

The string would be "\xe7t\xe7" and I want to write in a file été and
not \xe7t\xe7.

"\xe7t\xe7" _is_ the same as "été" if you are using e. g. the ISO-8859-1
encoding, so chances are you will see été if you open the file in a text
editor without the need of prior conversions.

But I may be misunderstanding you and you really have "\\xe7t\\xe7" - in
that case you can use de/encode to switch between the two representations:
été

(In the interpreter the result of the previous calculation is assigned to _
if it is not None)

Peter
 
J

jack

Thanks,

The solution provided by phil and peter works perfectly for my
solution (and I will have to work a little more to understand them
fully). I will check the binascii.

Regards.
Jack.

Phil and peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top