Python3.9.12上传jsonl至OpenAI微调GPT-3.5-turbo-1106遇编码错误
问题解决:上传jsonl到OpenAI时触发UnicodeEncodeError
错误原因
报错中的\u201c是智能左引号(“),属于非ASCII字符。httpx库处理请求头时默认尝试用ASCII编码,遇到该字符后触发编码失败。结合你的代码和场景,主要触发点包括:
- 代码中错误地将文件路径变量名写成了字符串常量,导致加载错误文件或路径解析异常
- 系统默认编码非UTF-8,导致请求头编码逻辑出错
- jsonl文件中包含智能引号等非ASCII字符,或文件编码不是UTF-8
修复步骤
1. 修正代码中的基础错误
首先修复代码里的两个明显问题:
from openai import OpenAI import os # 强制设置Python IO编码为UTF-8 os.environ["PYTHONIOENCODING"] = "utf-8" # 修正客户端实例化方式(已导入OpenAI,无需加openai前缀) client = OpenAI() training_data_path = "fine_tuneGPT_test.jsonl" # 用with语句安全打开文件,使用变量而非字符串常量作为路径 with open(training_data_path, "rb") as f: response = client.files.create( file=f, purpose="fine-tune" ) print(response)
2. 检查并修复jsonl文件
- 确保文件中所有引号都是普通双引号("),替换掉智能引号(“”)这类非ASCII字符
- 将文件保存为UTF-8编码(可通过记事本/VS Code等工具的编码选项设置)
3. 进阶:自定义httpx客户端强制编码
如果上述步骤仍未解决,可通过自定义httpx客户端强制指定UTF-8编码:
from openai import OpenAI import httpx import os os.environ["PYTHONIOENCODING"] = "utf-8" # 创建自定义httpx客户端,强制UTF-8编码 httpx_client = httpx.Client( default_encoding="utf-8", headers={"Content-Type": "application/json; charset=utf-8"} ) client = OpenAI(http_client=httpx_client) training_data_path = "fine_tuneGPT_test.jsonl" with open(training_data_path, "rb") as f: response = client.files.create( file=f, purpose="fine-tune" ) print(response)
内容的提问来源于stack exchange,提问作者user1066558
相关产品推荐
相关产品推荐

