I'm currently porting a Python2 script to Python3 and have problems with this line:
print('\xfe')
When I run it with Python2 python test.py > test.out
, than the file consists of the hex-values FE 0A
, like expected.
But when I run it with Python3 python3 test.py > test.out
, the file consists of the hex-values C3 BE 0A
.
What's going wrong here? How can I receive the desired output FE 0A
with Python3.
The byte-sequence C3 BE
is the UTF-8 encoded representation of the character U+00FE.
Python 2 handles strings as a sequence of bytes rather than characters. So '\xfe'
is a str
object containing one byte.
In Python 3, strings are sequences of (Unicode) characters. So the code '\xfe'
is a string containing one character. When you print the string, it must be encoded to bytes. Since your environment chose a default encoding of UTF-8, it was encoded accordingly.
How to solve this depends on your data. Is it bytes or characters? If bytes, then change the code to tell the interpreter: print(b'\xfe')
. If it is characters, but you wanted a different encoding then encode the string accordingly: print( '\xfe'.encode('latin1') )
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With