Python3导出LDAP数据到JSON时解码波兰字符的位置咨询
解决Python3中LDAP波兰字符转义问题,保存为带原生字符的JSON
核心思路
问题出在两个环节:一是LDAP返回的字符串可能包含Unicode转义序列而非原生字符,二是默认JSON序列化会转义非ASCII字符。需要在数据预处理阶段解码转义序列,并在JSON保存阶段关闭ASCII强制转义。
步骤1:处理LDAP返回的转义字符串
在将LDAP查询结果整理为可序列化的Python数据结构(字典/列表)时,对每个字符串字段做转义解码:
# 示例:处理单条LDAP返回数据 def process_ldap_entry(entry): processed = {} for attr, values in entry.items(): # LDAP属性值通常是列表,取第一个有效元素 if values and isinstance(values[0], str): # 将Unicode转义序列解码为原生字符 decoded = values[0].encode('utf-8').decode('unicode-escape') processed[attr] = decoded elif values and isinstance(values[0], bytes): # 如果返回的是bytes,先转成str再解码 raw_str = values[0].decode('utf-8') processed[attr] = raw_str.encode('utf-8').decode('unicode-escape') else: processed[attr] = values return processed # 假设你从LDAP获取了多条数据 ldap_results = [...] # 你的LDAP查询结果 processed_data = [process_ldap_entry(entry) for entry in ldap_results]
步骤2:保存JSON时保留原生字符
使用json.dump()时,必须指定ensure_ascii=False,同时设置文件编码为utf-8,确保波兰字符直接写入文件:
import json with open('ldap_data.json', 'w', encoding='utf-8') as f: json.dump(processed_data, f, ensure_ascii=False, indent=4)
验证方法
运行代码后打开JSON文件,检查是否直接显示Bożena Źródlana而非转义后的Bo\u017cena \u017bródlana。如果仍有问题,可单独打印处理后的字段值,确认解码是否生效。
内容的提问来源于stack exchange,提问作者Kubix
相关产品推荐
相关产品推荐

