Python3 打印原始字节

Tim*_*o89 3 python printing python-3.x

我想要一个简单的单行解决方案,可以打印一个字节。

python3 -c 'print("A", end="")' | xxd -p
python3 -c 'print("\x41", end="")' | xxd -p
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,两行的输出都是 41

python3 -c 'print("\xec", end="")' | xxd -p
Run Code Online (Sandbox Code Playgroud)

这输出: c3ac

我认为这与 python3 使用 utf-8 作为默认编码的事实有关,但是我找不到一个简单的解决方案。

基本上,我想要 python3 相当于:

perl -e 'print "\xec"'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

打印的字符串被写入sys.stdout对象并编码为您的系统编码。实际写入的字节取决于您的系统区域设置;您的终端配置为 UTF-8,因此 U+00EC 字符被编码为两个字节。

您需要将原始字节写入sys.stdout.buffer

python3 -c 'import sys; sys.stdout.buffer.write(b"\xec")'
Run Code Online (Sandbox Code Playgroud)

注意b前缀。

演示:

$ python3 -c 'import sys; sys.stdout.buffer.write(b"\xec")' | xxd -p
ec
Run Code Online (Sandbox Code Playgroud)