根本原因是模型输出的utf-8字节流未被notebook内核正确解码,尤其当环境默认编码非utf-8(如cp936、latin-1)时,print()或display()直接将原始字节渲染为方块、问号等乱码;需通过修改kernel.json添加"-x" "-utf8"参数或会话前设置os.environ['pythonioencoding']='utf-8'强制启用utf-8,并避免response.json()二次解析而应直接使用part.text。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Jupyter Notebook中调用Gemini API返回中文文本时出现方块、问号或字符堆叠,根本原因是模型输出的UTF-8字节流未被Notebook内核正确解码,尤其当环境默认编码为latin-1或系统locale未设为zh_CN.UTF-8时,【Python 3.8+默认使用UTF-8,但Notebook内核启动时可能未继承系统编码】,导致print()或display()直接将原始字节当作乱码渲染。
确认当前内核编码是否生效
运行以下代码检查实际生效的编码:
import locale
print(locale.getpreferredencoding())
若输出不是UTF-8(如cp936、ANSI_X3.4-1968),说明内核未启用UTF-8环境,后续所有中文输出都会出错。
强制Notebook内核使用UTF-8编码
方法一:修改内核启动参数(永久生效)
找到当前Python环境的kernel.json文件(路径类似:~/.local/share/jupyter/kernels/python3/kernel.json),用文本编辑器打开,在argv数组中插入"-X" "-utf8"参数,使该行变为:
["python", "-X", "utf8", "-m", "ipykernel_launcher", "-f", "{connection_file}"]
方法二:临时覆盖(当前会话有效)
在Notebook首个cell顶部添加:
用于在用户想通过浏览器自动化与 Google Gemini 或 ChatGPT 交互时。触发短语包括“ask Gemini”“ask ChatGPT”“ask GPT”“让...”。
import os
os.environ['PYTHONIOENCODING'] = 'utf-8'
⚠️注意:此设置必须在导入任何可能触发输出的模块(如google.generativeai)之前执行,否则无效。
API调用时显式声明响应编码
第一步:初始化Gemini客户端时传入requests.Session并预设编码
第二步:在生成content后,对response.text手动decode('utf-8')而非依赖自动解码
第三步:若使用generate_content()返回的Part对象,其text属性已为str,但需确认其底层bytes来源是否被中间层篡改——【务必跳过response.content直接访问Part.text,不要用response.json()二次解析】
这一步操作起来很简单,直接把生成后的Part.text打印出来就行。但若先用response.json()提取再转str,会触发JSON库的默认编码fallback,极易引入乱码。
终端与浏览器双重验证
① 在命令行中cd到Notebook所在目录 → 执行jupyter notebook --no-browser → 观察终端输出中文是否正常;
② 若终端正常但浏览器乱码,说明是前端渲染问题:关闭所有Chrome扩展 → 用无痕窗口访问 → 检查页面HTTP响应头Content-Type是否含charset=utf-8;
③ 若两者均乱码,则问题锁定在内核编码或API调用链路。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










