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

含匈牙利语特殊字符的制表符分隔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")

关键说明

  1. 分隔符修正:原来代码里的delimiter=' '是三个空格,实际上应该用\t来表示制表符,这样才能正确解析TXT里的列分隔。
  2. JSON转义控制:json.dumps()默认的ensure_ascii=True会把所有非ASCII字符转成\uXXXX格式,设置为False后就会保留原始的匈牙利语特殊字符。
  3. 文件编码指定:打开输出文件时加上encoding="utf8",确保写入的内容以UTF-8编码存储,避免后续读取时出现乱码。

备注:内容来源于stack exchange,提问作者Mohammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:22:42