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

Python 2.7非ASCII字符打印乱码问题求助

解决Python输出非ASCII字符乱码的问题

哈哈,这个乱码问题我可太熟了!你已经做对了源码编码声明的部分,但问题出在终端/控制台的编码和Python输出的编码不匹配上,跟代码本身关系不大~

先给你拆解下原因:你加的#-*- coding:utf-8 -*-已经告诉Python用UTF-8解析源码,所以字符串"Öüç"在Python里是正确的Unicode对象(Python 2里是UTF-8编码的str,Python 3里是原生Unicode str)。但输出到终端时,你的终端用了错误的编码(比如CP1252、ISO-8859-1这类单字节编码)去解码UTF-8的字节,才会出现├û├╝├ğ这种乱码。

下面是几个靠谱的解决方法:

方法一:把终端编码改成UTF-8(最直接)

这是从根源解决问题的方式:

  • Windows CMD:打开CMD后先运行命令 chcp 65001,切换到UTF-8编码,再执行你的Python脚本。
  • Linux/macOS终端:打开终端偏好设置,找到“字符编码”选项,选择UTF-8(一般默认就是,但如果被改过的话需要调回来)。

方法二:针对Python 2,显式适配终端编码

如果你还在使用Python 2,可以在代码里把字符串编码成终端支持的字节再输出:

# -*- coding:utf-8 -*-
import sys
# 自动获取终端的输出编码,避免硬编码
print "Öüç".encode(sys.stdout.encoding)

要是你知道终端用的是特定编码(比如土耳其常用的CP1254),也可以直接写:

# -*- coding:utf-8 -*-
print "Öüç".encode('cp1254')

方法三:升级到Python 3(推荐)

Python 3对Unicode的支持是原生的,处理编码问题省心太多!你的代码改成下面这样,只要终端是UTF-8编码,就能直接正确显示:

# 编码声明可以加也可以不加,Python 3默认支持UTF-8源码
print("Öüç")

最后再补个小细节:你看到的├û├╝├ğ其实是UTF-8字节被CP1252解码后的结果——比如Ö的UTF-8字节是0xC3 0x96,在CP1252里0xC3对应├,0x96对应û,拼起来就成了乱码,这也反过来验证了是终端编码不匹配的问题~

内容的提问来源于stack exchange,提问作者Mete Tikici

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:20:46