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

UTF-8格式CSV转JSON丢失特殊字符且输出损坏问题求助

解决CSV转JSON的UTF-8格式异常问题

针对你遇到的BOM头、空键、多余换行、特殊字符转义这几个问题,直接给你修复后的代码和对应解决逻辑:

逐个问题修复说明

  • BOM头(\ufeff)问题:CSV是UTF-8 BOM格式,用utf-8-sig编码读取会自动剔除BOM,替代原来的utf-8编码。
  • 空键字段问题:遍历每行数据时,过滤掉键为空字符串的条目。
  • 字段多余换行符:对每个字段的值执行strip(),清除首尾的换行、空格等空白字符。
  • 特殊字符转义:调用json.dumps时添加ensure_ascii=False参数,保留原始UTF-8字符,避免转成Unicode编码。

修复后的完整代码

import csv
import json
import time

def csv_to_json(csvFilePath, jsonFilePath):
    jsonArray = []

    # 用utf-8-sig读取,自动去除BOM
    with open(csvFilePath, 'r', encoding='utf-8-sig') as csvf:
        csvReader = csv.DictReader(csvf)

        for row in csvReader:
            # 处理每行数据:过滤空键+去除字段首尾空白/换行
            cleaned_row = {key: value.strip() for key, value in row.items() if key}
            jsonArray.append(cleaned_row)

    # ensure_ascii=False保留UTF-8特殊字符
    with open(jsonFilePath, 'w', encoding='utf-8') as jsonf:
        jsonString = json.dumps(jsonArray, indent=4, ensure_ascii=False)
        jsonf.write(jsonString)

csvFilePath = r'scoopsoft_dump.csv'
jsonFilePath = r'scoopsoft_dump.json'

start = time.perf_counter()
csv_to_json(csvFilePath, jsonFilePath)
finish = time.perf_counter()

print(f"Conversion 100.000 rows completed successfully in {finish - start:0.4f} seconds")

验证效果

修复后输出的JSON会:

  • 表头不再有\ufeff前缀
  • 空键条目被移除
  • 字段里的多余换行符被清除
  • 特殊字符(如é)会正常显示,不会变成\u00e9

内容的提问来源于stack exchange,提问作者Mohammed Khawaja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:05:34