Windows命令提示符下Python decode输出编码异常原因咨询
为何Windows命令提示符下Python输出重定向会生成ANSI编码文件?
核心差异源于Python在不同终端环境下的默认输出编码规则:
在Windows命令提示符(CMD)中,系统默认控制台编码并非UTF-8(通常是对应系统语言的ANSI编码,比如简体中文系统为GBK)。当你执行
print(b'\xc3\x96'.decode('utf-8'))时,Python先将UTF-8字节串解码为Unicode字符Ö,随后自动将该字符转换为控制台默认编码输出。使用>重定向到文件时,写入的就是转换后的ANSI编码字节,因此Notepad++会识别为ANSI编码。MSYS2终端默认采用UTF-8作为编码环境,Python会直接将Unicode字符以UTF-8编码输出,重定向到文件后自然保留UTF-8编码格式。
解决办法
要在Windows CMD下生成UTF-8编码的输出文件,可采用以下方式:
强制Python使用UTF-8输出:通过设置
PYTHONIOENCODING环境变量指定输出编码:PYTHONIOENCODING=utf-8 python -c "print(b'\xc3\x96'.decode('utf-8'))" > test.txt直接写入UTF-8文件:绕过控制台输出逻辑,在Python代码中直接以UTF-8编码写入文件:
python -c "with open('test.txt', 'w', encoding='utf-8') as f: f.write(b'\xc3\x96'.decode('utf-8'))"
内容的提问来源于stack exchange,提问作者August Karlstrom
相关产品推荐
相关产品推荐

