如何用Python解析含KrutiDev字体印地语的Word文件并正确转JSON
解决KrutiDev 010字体印地语文本转Unicode并保存为JSON的问题
问题本质
KrutiDev 010是非Unicode的编码型字体——它并非用标准Unicode存储印地语,而是将普通ASCII字符映射为印地语字形。你从docx中提取的"乱码"其实是KrutiDev编码对应的ASCII字符,必须先转换为标准Unicode印地语,才能正常保存为JSON。
解决方案步骤
1. 提取docx中的KrutiDev编码文本
用python-docx库提取文档文本,得到的就是需要转换的ASCII字符序列:
from docx import Document # 读取目标docx文件 doc = Document("your_file.docx") # 提取所有段落的文本内容 krutidev_raw_text = "\n".join([para.text for para in doc.paragraphs])
2. 将KrutiDev编码转换为Unicode印地语
使用专门的转换库krutidev-to-unicode处理字符映射:
先安装依赖库:
pip install krutidev-to-unicode
然后执行转换:
from krutidev_to_unicode import Converter converter = Converter() unicode_hindi_text = converter.convert(krutidev_raw_text)
如果需要自定义特殊字符的映射(比如库未覆盖的生僻符号),可以自行维护映射字典替换:
# 示例映射片段,完整映射表可自行查找补充 krutidev_unicode_map = { 'q': 'क', 'Q': 'क़', 'w': 'ख', 'W': 'ख़', 'e': 'ग', 'E': 'ग़', 'r': 'घ', 'R': 'घ़' } unicode_hindi_text = ''.join([krutidev_unicode_map.get(c, c) for c in krutidev_raw_text])
3. 保存为JSON文件
确保启用ensure_ascii=False并指定UTF-8编码,避免Unicode字符被转义:
import json with open("hindi_output.json", "w", encoding="utf-8") as f: json.dump({"hindi_content": unicode_hindi_text}, f, ensure_ascii=False, indent=4)
注意事项
- 确认docx中的文本是KrutiDev编码存储的(而非内嵌字体的图片式文本),如果是图片形式,需要先通过OCR识别出KrutiDev编码的字符再转换。
- 部分转换库对生僻字符支持有限,可通过补充自定义映射表完善转换逻辑。
内容的提问来源于stack exchange,提问作者Akshat 08
相关产品推荐
相关产品推荐

