[求助] gptel 如何解决 中文(非英文?) 乱码问题?

如题, 只要是中文过去, gptel-log 输出就会是乱码, 导致 发送/回复 的文本都是乱码, 不能正常使用.
我已经使用 emacs -Q 测试了, 还是有乱码问题.
系统环境: Windows 10, Emacs 30.1 正式版, gptel 最新的 master 如图所示:

buffer 的编码是?zsbd

utf-8 unix
感觉不关 buffer 编码问题, 不管当前 buffer 编码是什么, 都会有问题

发起请求的方式呢?是curl 还是 Emacs 自己的 url?

应该是外部的 curl, 因为 gptel-use-curl 为 t
要是 gptel-use-curl 设置为 nil 直接不回复(相当与无响应)到当前buffer, 但是 gptel-log 是有看到回复的

我也试试 gemini 去…

如果调用gptel-request没有制定stream参数,是使用url request. log里面打印的json消息串没有显示汉字跟乱码无关。

但是,我还是不知道你这里为什么乱吗:)

对 gemini 遇到了相同的问题

我找找怎么回事去

有一点点发现了, 看起来是 gemini 的问题
我使用 deepseek 使用时, 虽然发送的是乱码, 但是回复的确实正经中文的而不是像 gemini 回复那样是乱码文

json 是正常的 UTF-8 编码,就是不知道为什么 gptel 不能正常显示。

你使用 gemini 时, gptel-log 是怎么 发/回 的? 乱码文?

我没有 curl,用的 Emacs 的 url,和你一样没有输出但是有 Log 消息

解决了,不能用 stream 参数。

(setq gptel-model 'gemini-2.0-flash
      gptel-backend (gptel-make-gemini "Gemini"
                      :key "你的 gemini api"))
(setq gptel-use-curl nil)

不过我不清楚具体原因。

macOS14 emacs31 gptel Gemini 中文正常

1 个赞

真奇怪啊, 要是使用 gemini 必须满足两个条件:

  1. 不能用 stream 参数
  2. gptel-use-curl 必须为 nil, 如果为 t, 那么不响应到当前buffer(但 gptel-log 有回)

不太懂,没怎么了解过 gptel 怎么调 api 的。

可以问问 AI 去 :innocent:

我配置了 stream 为 t,不知道 windows 和 macOS 调用 curl 有什么区别?

感觉不全是 curl 的原因,从 json 来看不管是 curl 还是 url.el 都正常返回了数据,但 Windows 上设定 :stream 参数就有问题。

不管了,能用就行 :crazy_face:

谢谢你, 让我又可以愉快的使用 gptel
这个乱码问题困扰了我好久了, 早知道早点询问了…

1 个赞

可能是用了windows自带的curl吧,还想用curl的可以试试msys带的(gptel没法指定curl路径,所以我以前尝试gptel的时候也是gptel-use-curl设为nil了,所以不确定msys的curl行不行)。