Python:同一字符的不同字节值?

标签 python text unicode ascii decode

我正在编写的程序使用函数 mscvrt.getch() 捕获单个按键,它的工作方式与同名的 C 函数非常相似,但它不是返回一个 char 变量,而是返回一个字节,之后我必须对其进行解码。

但是,它在解码非 ascii 字符时遇到问题,比如重音字母(它会触发 UnicodeDecodeError),所以我用一个函数来处理这个异常,该函数将返回的字节值与我想要的特殊字符的字节值列表进行比较, 如果它与其中之一匹配,则该函数返回其等效字符。

问题是我注意到我使用的两台机器上的字节值不同(可能与使用不同语言的系统和/或我使用不同布局的键盘有关)。

比如我输入字符à,返回的字节值在一台机器上是b'\x85',而b'\xe0 ' 在另一个。

为什么会这样?我怎样才能做出一个“通用解决方案”(优雅,最好),可以在任何机器上按我的意愿工作?

最佳答案

使用msvcrt.getwch() .

它将返回一个包含该字符的 str(而不是一个字节),并使用 unicode 而不是 ascii。

关于Python:同一字符的不同字节值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46634053/

相关文章:

python - 当我在 Visual Studio Code 上使用 Python 执行 'Run Selected' 时,它突然打开两个 Python 终端,其中一个不运行我的 Python 代码

python - DictReader 字段名称位于第三行而不是第一行

c++ - 插入器和提取器读取/写入二进制数据与文本

python - 从 tkinter 中的文本小部件复制格式化文本

c++ - C++0x 是否支持 std::wstring 与 UTF-8 字节序列的转换?

c++ - 带有 bool 参数的构造函数总是使用 _T ("..."调用)?

Python 迭代器和 zip

python - 如何使用 numpy 将一个小矩阵添加到一个大矩阵中?

regex - 替换两个特殊字符之间的文本

c++ - Main 只接收参数的首字母