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

ChatGPT微调时JSONL文件报UnicodeEncodeError问题求助

解决ChatGPT微调时JSONL文件的UnicodeEncodeError问题

问题分析

报错里的\u201c是左智能双引号(弯引号),这类非ASCII字符虽不影响UTF-8存储,但在上传或处理时被系统用latin-1编码转换就会触发错误。你看不到它,大概率是复制粘贴内容时带入的隐藏字符,或是文本编辑器自动将直引号替换成了智能引号。

具体解决步骤

1. 定位隐藏的非ASCII字符

用Python脚本扫描JSONL文件,精准找出所有非ASCII字符的位置和内容:

with open("your_file.jsonl", "r", encoding="utf-8") as f:
    line = f.readline()
    for idx, char in enumerate(line):
        if ord(char) > 127:
            print(f"位置{idx}: 字符{repr(char)},Unicode编码{ord(char)}")

2. 批量替换智能引号

把所有智能引号(左双引号\u201c、右双引号\u201d、左单引号\u2018、右单引号\u2019)替换为普通直引号:

import json

with open("your_file.jsonl", "r", encoding="utf-8") as f:
    data = json.load(f)

def replace_smart_quotes(text):
    text = text.replace("\u201c", '"').replace("\u201d", '"')
    text = text.replace("\u2018", "'").replace("\u2019", "'")
    return text

data["prompt"] = replace_smart_quotes(data["prompt"])
data["completion"] = replace_smart_quotes(data["completion"])

# 保存为单行合法JSONL
with open("fixed_file.jsonl", "w", encoding="utf-8") as f:
    json.dump(data, f)
    f.write("\n")

3. 确保JSONL格式合规

你的示例中completion部分存在换行,这会导致JSON解析失败。JSONL要求每行必须是完整的JSON对象,上述脚本用json.dump会自动将内容转为单行,解决格式问题。

4. 用官方工具验证修复

使用OpenAI官方微调数据准备工具,自动检查并修复各类格式问题:

openai tools fine_tunes.prepare_data -f fixed_file.jsonl

该工具会处理编码、格式、换行等问题,还会给出数据优化建议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:13:23