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

字节格式Unicode字符串打印问题:输出d’int失败与emacs排查

解决Python字节串解码后在Emacs中打印触发UnicodeEncodeError的问题

问题回顾

你有一个从数据库读取的字节串 b'd\xe2\x80\x99int',想要解码并打印成带弯引号的字符串 d’int,但执行 print(b'd\xe2\x80\x99int'.decode('utf-8')) 时触发了如下错误:

UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 1: ordinal not in range(128)

后来你也发现了,问题根本不在Python代码本身,而是出在Emacs的编码配置上——这确实和Unicode相关文档描述的场景完全一致。

解决方案

Emacs默认可能会把Python交互进程的输出编码设置为ASCII,导致无法处理Unicode字符,下面是两种解决方式:

临时修复(当前缓冲区生效)

在Emacs的Python交互缓冲区中,按下 M-:(Alt+冒号),输入以下Lisp代码并回车:

(set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix)

这会立即将当前Python进程的输入、输出编码都设置为UTF-8,之后再运行你的print语句就能正常显示d’int了。

永久配置(所有Python模式缓冲区生效)

如果你不想每次都手动设置,可以把以下代码添加到你的Emacs配置文件(比如~/.emacs或者~/.emacs.d/init.el)中:

(add-hook 'python-mode-hook
          (lambda ()
            (setq buffer-process-coding-system '(utf-8-unix . utf-8-unix))))

这样每次打开Python模式的缓冲区时,Emacs都会自动为关联的Python进程配置UTF-8编码,彻底解决这个问题。

额外验证

你也可以在Python中检查输出编码是否生效,执行以下代码:

import sys
print(sys.stdout.encoding)

设置正确后,输出应该是utf-8,而不是之前的ascii。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:47:08