You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python2与Python3 print输出差异及Python3适配方案问询

解决Python3与Python2输出字节一致的问题

问题根源

Python2里的字符串默认是字节串(bytes),print会直接把字节原封不动输出到终端;而Python3里的字符串是Unicode字符串,print会自动将Unicode编码为终端的默认字符集(通常是UTF-8),这就导致你输入的"\xef\xbe\xad\xde"在两种版本中输出的字节完全不同——Python2直接输出这四个字节,Python3则把它们当成Unicode字符编码成UTF-8字节,自然结果不一样。

两种解决方案

方法1:直接写入标准输出的字节流

绕过Python3的Unicode处理,直接通过sys.stdout.buffer写入原始字节,和Python2的print行为完全一致。注意要手动添加换行符(b"\n"),因为write不会像print那样自动加换行:

$ python3 -c 'import sys; sys.stdout.buffer.write(b"A"*20 + b"\xef\xbe\xad\xde" + b"A"*4 + b"\n")'

执行后输出的字节和Python2完全相同,管道传输给其他进程也不会有差异。

方法2:强制输出编码为Latin-1

Latin-1是单字节编码,每个字节对应唯一的Unicode字符,这样Python3的print会把Unicode字符串按Latin-1编码成原始字节,和Python2的输出一致。通过设置PYTHONIOENCODING环境变量实现:

$ PYTHONIOENCODING=latin-1 python3 -c 'print("A"*20 + "\xef\xbe\xad\xde" + "A"*4)'

这个命令的输出会和Python2的AAAAAAAAAAAAAAAAAAAAᆳ▒AAAA完全一致。

内容的提问来源于stack exchange,提问作者Black Hemera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:32:39