Tiodani
Tiodani

Reputation: 125

Python: different byte values for the same character?

The program I'm writing captures individual keypresses with the function mscvrt.getch(), which works very similarly to the C function of the same name, but instead of returning a char variable, it returns a byte, which I have to decode afterwards.

However, it has a problem decoding non-ascii characters, like accented letters (it triggers a UnicodeDecodeError), so I handle this exception with a function that compares the returned byte value with a list of byte values of special characters I want, and if it matches with one of them, the function returns its char equivalent.

The problem is that I noticed that the byte value is different on two machines I use (probably something to do with the system being in different languages, and/or I using keyboards with a different layout).

For example, if I input the character à, the byte value returned will be b'\x85' in one machine, and b'\xe0' in the other.

Why does this happen? How can I make a "universal solution" (elegant, preferably) that can work as I want in any machine?

Upvotes: 2

Views: 94

Answers (1)

Uriel
Uriel

Reputation: 16224

Use msvcrt.getwch().

It will return a str (rather than a byte) that contains the character, and works with unicode rather than ascii.

Upvotes: 1

Related Questions