Python CSV转JSON时斯洛文尼亚特殊字符显示异常求助
解决JSON输出中非ASCII字符转义的问题
问题出在json.dump()的默认行为上——它的ensure_ascii参数默认值为True,会自动把所有非ASCII字符转换成Unicode转义序列(比如\u0161)。要让特殊字符直接以UTF-8编码输出,只需要将这个参数设为False即可。
修改后的代码如下:
import csv import json def read_rail_nodes(_in_file: str, _out_file: str) -> None: json_objects = [] with open(_in_file, 'r', encoding='utf-8') as file: csv_reader = csv.reader(file) next(csv_reader) for row in csv_reader: id, station_name, _, _ = row json_objects.append({'id': id, 'station_name': station_name}) # 添加ensure_ascii=False参数,关闭自动转义 with open(_out_file, 'w', encoding='utf-8') as file: json.dump(json_objects, indent=4, fp=file, ensure_ascii=False) print("\n[rail_nodes.csv] data converted and saved to [", _out_file, "]\n") read_rail_nodes('rail_nodes.csv', 'rail_nodes.json')
关键说明:
ensure_ascii=False会让json.dump()直接输出原UTF-8字符,而非转义成Unicode序列,完全符合你的期望输出要求。- 你之前设置的文件读写编码
utf-8是正确的,无需修改,配合ensure_ascii=False就能确保斯洛文尼亚语特殊字符(č、š、ž等)正常显示。 - 用VS Code打开输出的JSON文件时,保持编码为UTF-8即可直接看到正确字符,不会出现乱码问题。
这种修改不存在后续风险,因为JSON规范本身支持UTF-8编码的字符直接写入,所有符合标准的JSON解析器都能正确处理这些字符。
内容的提问来源于stack exchange,提问作者i_hate_F_sharp
相关产品推荐
相关产品推荐

