我正在编写的程序使用函数 mscvrt.getch() 捕获单个按键,它的工作方式与同名的 C 函数非常相似,但它不是返回一个 char 变量,而是返回一个字节,之后我必须对其进行解码。
但是,它在解码非 ascii 字符时遇到问题,比如重音字母(它会触发 UnicodeDecodeError),所以我用一个函数来处理这个异常,该函数将返回的字节值与我想要的特殊字符的字节值列表进行比较, 如果它与其中之一匹配,则该函数返回其等效字符。
问题是我注意到我使用的两台机器上的字节值不同(可能与使用不同语言的系统和/或我使用不同布局的键盘有关)。
比如我输入字符à,返回的字节值在一台机器上是b'\x85',而b'\xe0 ' 在另一个。
为什么会这样?我怎样才能做出一个“通用解决方案”(优雅,最好),可以在任何机器上按我的意愿工作?
请您参考如下方法:
使用msvcrt.getwch()
.
它将返回一个包含该字符的 str
(而不是一个字节),并使用 unicode 而不是 ascii。