【问题标题】:Python3 print raw bytePython3 打印原始字节
【发布时间】:2024-01-24 09:56:01
【问题描述】:

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

python3 -c 'print("A", end="")' | xxd -p
python3 -c 'print("\x41", end="")' | xxd -p

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

python3 -c 'print("\xec", end="")' | xxd -p

这个输出:c3ac

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

基本上,我想要 python3 等价物:

perl -e 'print "\xec"'

【问题讨论】:

    标签: python python-3.x printing


    【解决方案1】:

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

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

    python3 -c 'import sys; sys.stdout.buffer.write(b"\xec")'
    

    注意b 前缀。

    演示:

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

    【讨论】: