使用LangChain JSONLoader加载含德语Umlaute的UTF-8 JSON编码异常问题
解决LangChain JSONLoader加载含德语变音符号JSON的编码问题
方案1:加载后手动处理编码
加载数据后,将每个文档的page_content解析为字典,再用json.dumps并设置ensure_ascii=False重新生成字符串,即可保留原始Unicode字符:
import json from langchain_community.document_loaders import JSONLoader loader = JSONLoader( file_path='test.json', jq_schema='.json[]', text_content=False) data = loader.load() for doc in data: content_dict = json.loads(doc.page_content) doc.page_content = json.dumps(content_dict, ensure_ascii=False) print(data[0].page_content)
方案2:自定义Unicode友好的JSONLoader
如果需要多次复用该逻辑,可以子类化JSONLoader,重写解析逻辑确保输出保留Unicode字符:
from langchain_community.document_loaders import JSONLoader import json from langchain_community.document_loaders.json_loader import jq class UnicodeJSONLoader(JSONLoader): def _parse(self, content: str) -> list[str]: parsed_items = jq.compile(self.jq_schema).input(json.loads(content)).all() return [json.dumps(item, ensure_ascii=False) for item in parsed_items] # 使用自定义加载器 loader = UnicodeJSONLoader( file_path='test.json', jq_schema='.json[]', text_content=False) data = loader.load() print(data[0].page_content)
问题根源
当text_content=False时,JSONLoader默认使用json.dumps(ensure_ascii=True)将解析后的JSON对象转为字符串,导致德语变音符号被转义为ASCII序列。设置ensure_ascii=False会让序列化过程保留原始Unicode字符,避免转义。
内容的提问来源于stack exchange,提问作者johannes89
相关产品推荐
相关产品推荐

