含匈牙利语特殊字符的制表符分隔TXT转JSONL时的编码问题解决求助
含匈牙利语特殊字符的制表符分隔TXT转JSONL时的编码问题解决求助
大家好,我遇到了一个编码相关的小麻烦,想请各位帮忙看看:
我有一个制表符分隔的TXT文件,里面包含两列数据——文件名和匈牙利语文本,示例内容如下:
text.txt
23.jpg még
24.jpg több
我的目标是把这个文件转换成JSONL(每行一个JSON对象)格式,期望的输出应该是这样的:
{"file_name": "23.jpg", "text": "még"}
{"file_name": "24.jpg", "text": "több"}
但实际生成的JSONL文件里,匈牙利语的特殊字符(比如á、é、í、ö、ó、ő、ü、ú、ű这些大小写形式)都被转成了Unicode转义序列,比如é变成了\u00c3\u00a9,实际输出变成了:
{"file_name": "23.jpg", "text": "m\u00c3\u00a9g"}
{"file_name": "24.jpg", "text": "t\u00c3\u00b6bb"}
我自己写了一段Python脚本用来做转换,但没解决这个问题,代码如下:
import pandas as pd train_text = 'text.txt' df = pd.read_csv(f'{train_text}' ,header=None,delimiter=' ',encoding="utf8") # 这里原本想指定制表符分隔,写成了三个空格 df.rename(columns={0: "file_name", 1: "text"}, inplace=True) # 转换为JSON Lines格式 reddit = df.to_dict(orient= "records") import json with open("output_file.jsonl","w") as f: for line in reddit: f.write(json.dumps(line) + "\n")
请问有没有办法让生成的JSONL文件里直接保留匈牙利语的特殊字符,而不是转义后的序列?
解决方案
其实问题出在两个地方:json.dumps()的默认行为,以及读取文件时分隔符的设置。修改后的代码如下:
import pandas as pd import json train_text = 'text.txt' # 用\t表示制表符,正确分割列 df = pd.read_csv(train_text, header=None, delimiter='\t', encoding="utf8") df.rename(columns={0: "file_name", 1: "text"}, inplace=True) reddit = df.to_dict(orient="records") # 打开文件时指定UTF-8编码,同时在json.dumps里关闭ASCII转义 with open("output_file.jsonl", "w", encoding="utf8") as f: for line in reddit: # ensure_ascii=False 让JSON直接输出原始Unicode字符,不转义 f.write(json.dumps(line, ensure_ascii=False) + "\n")
关键说明
- 分隔符修正:原来代码里的
delimiter=' '是三个空格,实际上应该用\t来表示制表符,这样才能正确解析TXT里的列分隔。 - JSON转义控制:
json.dumps()默认的ensure_ascii=True会把所有非ASCII字符转成\uXXXX格式,设置为False后就会保留原始的匈牙利语特殊字符。 - 文件编码指定:打开输出文件时加上
encoding="utf8",确保写入的内容以UTF-8编码存储,避免后续读取时出现乱码。
备注:内容来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

