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

如何解决OpenAI Python模块中的Unicode编码错误?

解决OpenAI API调用中的UnicodeEncodeError编码问题

问题场景

开发基于OpenAI GPT-3.5-turbo的聊天机器人,支持语音输入转文本、GPT生成回复后转语音输出,但调用OpenAI API时触发如下编码错误:

UnicodeEncodeError: 'latin-1' codec can't encode character '\u201c' in position 7: ordinal not in range(256)

错误原因

HTTP协议头默认使用latin-1编码,而语音识别(此处用sphinx)返回的文本中包含了latin-1不支持的Unicode特殊字符(比如\u201c是智能左双引号)。当OpenAI的Python SDK底层发送请求时,会尝试用latin-1编码HTTP相关内容,遇到这类字符就会触发编码失败。

解决方法

预处理语音识别的文本结果,清理或替换掉latin-1不支持的特殊Unicode字符,常用两种方式:

方式1:定向替换特殊字符

针对常见的特殊标点(比如智能引号)替换为普通ASCII标点:

# 替换智能引号为普通引号,处理常见Unicode特殊字符
my_question = my_question.replace('\u201c', '"').replace('\u201d', '"')
my_question = my_question.replace('\u2018', "'").replace('\u2019', "'")

方式2:过滤非ASCII字符

如果不需要保留非ASCII字符,直接过滤所有超出ASCII范围的内容:

# 仅保留ASCII字符,忽略其他Unicode字符
my_question = my_question.encode('ascii', 'ignore').decode('ascii')

修改后的完整代码

import os
import speech_recognition as sr
import openai
from dotenv import load_dotenv
from os import path
from playsound import playsound
from gtts import gTTS
import simpleaudio as sa

load_dotenv()

language = 'en'

openai.api_key = os.getenv("OPENAI_API_KEY")

while True:
    # 语音输入识别
    recog = sr.Recognizer()
    with sr.Microphone() as source:
        audio = recog.listen(source)
    # 保存语音文件(可选,用于调试)
    with open("microphone-results.wav", "wb") as f:
        f.write(audio.get_wav_data())
    AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), "microphone-results.wav")
    my_question = recog.recognize_sphinx(audio)

    # --- 新增:清理文本中的特殊Unicode字符 ---
    my_question = my_question.replace('\u201c', '"').replace('\u201d', '"')
    my_question = my_question.replace('\u2018', "'").replace('\u2019', "'")
    # 或者用过滤方式:
    # my_question = my_question.encode('ascii', 'ignore').decode('ascii')

    # 调用OpenAI API生成回复
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "You are a chatbot named jarvis"},
            {"role": "user", "content": str(my_question)},
        ]
    )
    reply = ''.join(choice.message.content for choice in response.choices)
    tts = gTTS(reply)
    tts_file = "temp.wav"

    tts.save(tts_file)
    wave_obj = sa.WaveObject.from_wave_file(tts_file)
    play_obj = wave_obj.play()
    play_obj.wait_done()

    os.remove(tts_file)

额外提示

  • 建议在语音识别后添加错误处理,比如捕获sr.UnknownValueError(无法识别语音)和sr.RequestError(识别服务出错),避免程序直接崩溃。
  • 升级OpenAI SDK到最新版本,可能已修复部分编码相关的底层问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:25:01