将整数转换为 8 位 ASCII 字符,而不是 Python 中的 Unicode 3

Converting integer to 8-bit ASCII characters, NOT Unicode in Python 3

我一直在从事一个将数字编码为字符的项目。由于习惯了 C++,我假设我可以使用任何 8 位数字并将其转换为一个字符。但是,python 的 chr() 函数返回的是 Unicode 字符,它不是 8 位的,所以这将不起作用。

我是 Python 的新手,根据我的阅读,以前的版本曾经有 2 个独立的函数:chr() 用于 ASCII 字符,unichr() 用于 Unicode 字符。

我也仅限于在 windows 的标准 python 库中可以获得的内容(我们不允许使用 pip 安装模块)。

这通常没问题,但下面是一个示例,说明这何时会扰乱我的程序: 如果我对整数 143 进行编码:

# this is not taken from my actual code
num = 143    
c = chr(143)
print(c)

我希望这会打印 ASCII 字符(大写字母 A,上面有一个小圆圈)。相反,我得到了 unicode \x8f,它代表 "SS3"(Single Shift 3)。

TL;DR:我正在将 8 位数字转换为字符,但 chr() 转换为 Unicode,我 真的 需要一种方法来转换改为 ASCII,但我似乎无法在标准库中找到它。

我知道这是一个如此简单的问题,而且卡在所有事情的这个上是非常令人沮丧的。

提前致谢!
祝你有美好的一天!
-弗拉德

"A with a little circle above it" 不是 ASCII 字符,143 在 ASCII 范围(0-127)之外。

您似乎是在考虑编码字节而不是 unicode 代码点(Python3 用来表示字符串值)。有关 8 位编码的信息,请参阅 here,其中 b'\x8f' 表示“Å ”。

您可能想做这样的事情:

import sys
c = 143
# Convert to byte
b = c.to_bytes(1, sys.byteorder)
# Decode to unicode (str) and print
print(b.decode('cp437'))
Å‎

您还可以查看标准库中的 struct 包,它以更 "C-like" 的方式处理字节和字符。