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
相关产品推荐
相关产品推荐

